-
RestController
(org.springframework.web.bind.annotation.RestController)
等價于@Controller
+@ResponseBody
- Log4j
-
Logger
The org.slf4j.Logger interface is the main user entry point of SLF4J API.
It is expected that logging takes place through concrete implementations
of this interface.
<h3>Typical usage pattern:</h3>
<pre>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Wombat {
<span style="color:green">final static Logger logger = LoggerFactory.getLogger(Wombat.class);</span>
Integer t;
Integer oldT;public void setTemperature(Integer temperature) {
oldT = t;
t = temperature;
<span style="color:green">logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);</span>
if(temperature.intValue() > 50) {
<span style="color:green">logger.info("Temperature has risen above 50 degrees.");</span>
}
}
}
</pre>Be sure to read the FAQ entry relating to parameterized
logging. Note that logging statements can be parameterized in
presence of an exception/throwable.<p>Once you are comfortable using loggers, i.e. instances of this interface, consider using
所有的log4j的級別,這些級別都相當于一層層的過濾器
Log4J Levels |
TRACE Level |
DEBUG Level |
INFO Level |
WARN Level |
ERROR Level |
FATAL Level |
---|---|---|---|---|---|---|
TRACE Level |
Y | Y | Y | Y | Y | Y |
DEBUG Level |
N | Y | Y | Y | Y | Y |
INFO Level |
N | N | Y | Y | Y | Y |
WARN Level |
N | N | N | Y | Y | Y |
ERROR Level |
N | N | N | N | Y | Y |
FATAL Level |
N | N | N | N | N | Y |
ALL Level |
Y | Y | Y | Y | Y | Y |
OFF Level |
N | N | N | N | N | N |
注:ALL和OFF是1.2.12加上去的
例如1:
log4j.rootLogger=ALL 所有的記錄都可以輸出,相當于沒有過濾
log4j.appender.CONSOLE.Threshold= OFF 所有的記錄都不能輸出,相當于在ALL的基礎上過濾了所有的記錄
例如2:
log4j.rootLogger=TRACE 和ALL一樣,相當于沒有過濾記錄
log4j.appender.CONSOLE.Threshold= INFO 這樣一來輸出了INFO 、WARN、ERROR 和 FATAL的記錄
log機制的詳細解讀 馬克,稍后再看
LoggerFactory
The <code>LoggerFactory</code> is a utility class producing Loggers for
various logging APIs, most notably for log4j, logback and JDK 1.4 logging.
Other implementations such as {@link org.slf4j.impl.NOPLogger NOPLogger} and
{@link org.slf4j.impl.SimpleLogger SimpleLogger} are also supported.
<p/>
<p/>
<code>LoggerFactory</code> is essentially a wrapper around an
{@link ILoggerFactory} instance bound with <code>LoggerFactory</code> at
compile time.
<p/>
<p/>
Please note that all methods in <code>LoggerFactory</code> are static.
tracelevel參數不再注冊表中
原因
如果安裝了簡單網絡管理協議 (SNMP) 服務但未配置此服務,則會發生此問題。當您重新啟動計算機時,SNMP 服務將這些錯誤事件記錄下來。如果未配置 Evntagnt.dll 文件以在 SNMP 服務啟動時進行調試跟蹤,則這兩個警告事件將被記錄下來。-
解決方案
若要防止這兩個事件的發生,請在下面的注冊表子項中添加 TraceFileName 和 TraceLevel 值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SNMP_EVENTS\EventLog\Parameters
- TraceFileName
類型:REG_SZ
值:空(空白) - TraceLevel
類型:REG_DWORD
值:32
修復程序信息
Microsoft 現在提供了受支持的修復程序,但此修復程序僅用于解決本文所述的問題。只有系統遇到本文提到的特定問題時才可應用此修復程序。
- TraceFileName
-
替代方法
要解決此問題,請將 SNMP 服務啟動類型配置為“已禁用”。為此,請按照下列步驟操作:- 單擊“開始”,單擊“運行”,在“打開”框中鍵入 services.msc,然后單擊“確定”。
- 在服務列表中,雙擊“SNMP Service”。
- 在“啟動類型”列表中,單擊“已禁用”,然后單擊“確定”。
參考資料: http://achilles.blog.sohu.com/1283780.html
@OneToOne
1)Person.Java
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* 關系維護端Person.java
*/
@Entity
@Table(name = "Person")
public class Person implements Serializable {
private Integer personid;//人員ID
private String name;// 姓名
private boolean sex;//性別
private Short age;//年齡
private Date birthday;//生日
private IDCard idcard;//身份證號碼
@Id
@GeneratedValue
public Integer getPersonid() {
return personid;
}
public void setPersonid(Integer personid) {
this.personid = personid;
}
@Column(name = "PersonName", nullable = false, length = 32)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(nullable = false)
public boolean getSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Column(nullable = false)
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
/*
* @Temporal主要是用來指明java.util.Date 或java.util.Calendar 類型的屬性具體與數據(date,time,timestamp)三個類型中的那一個進行映射
*/
@Temporal(value = TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/*
* @OneToOne注釋指明Person 與IDCard為一對一關系,@OneToOne注釋五個屬性:targetEntity、cascade、fetch、optional 和mappedBy,
*fetch屬性默認值是FetchType.EAGER。optional = true設置idcard屬性可以為null,也就是允訐沒有身份證,未成年人就是沒有身份證的。
*
*targetEntity屬性:Class類型的屬性。定義關系類的類型,默認是該成員屬性對應的類類型,所以通常不需要提供定義。
*cascade屬性:CascadeType[]類型。該屬性定義類和類之間的級聯關系。定義的級聯關系將被容器視為對當前類對象及其關聯類對象采取相同的操作,
*而且這種關系是遞歸調用的。cascade的值只能從CascadeType.PERSIST(級聯新建)、CascadeType.REMOVE(級聯刪除)、
*CascadeType.REFRESH(級聯刷新)、CascadeType.MERGE(級聯更新)中選擇一個或多個。還有一個選擇是使用CascadeType.ALL,表示選擇全部四項。
*
*fetch屬性:FetchType類型的屬性。可選擇項包括 :FetchType.EAGER 和FetchType.LAZY。
*FetchType.EAGER表示關系類(本例是OrderItem類)在主類加載的時候同時加載,FetchType.LAZY表示關系類在被訪問時才加載。默認值是FetchType.LAZY。
*
*@OrderBy(value = "id ASC")注釋指明加載元組時按id的升序排序(降序 "DESC")
*/
@OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
}
-
IDCard .java
import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name = "IDCard") public class IDCard implements Serializable { private Integer id;//流水號 private String cardno;//身份證號碼 private Person person;//對應的人 public IDCard() { } public IDCard(String cardno) { this.cardno = cardno; } @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(nullable = false, length = 18, unique = true) public String getCardno() { return cardno; } public void setCardno(String cardno) { this.cardno = cardno; } /** * @OneToOne注釋指明IDCard與Person為一對一關系, * IDCard是關系被維護端,optional = false設置person屬性值不能為null, * 也就是身份證必須有對應的主人。 * @JoinColumn(name = "Person_ID", referencedColumnName ="personid",unique = true) * 指明IDCard對應表的Person_ID列作為外鍵與 * Person對應表的personid列進行關聯,unique= true 指明Person_ID 列的值不可重復。 * @return */ @OneToOne(optional = false, cascade = CascadeType.REFRESH) @JoinColumn(name = "Person_ID", referencedColumnName = "personid", unique = true) public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }
@OneToOne
@OneToOne
注釋指明Person
與IDCard
為一對一關系,@OneToOne
注釋五個屬性:targetEntity
、cascade
、fetch
、optional
和mappedBy
,
optional = true
設置idcard
屬性可以為null
,也就是允訐沒有身份證,未成年人就是沒有身份證的。
targetEntity
屬性:Class類型的屬性。定義關系類的類型,默認是該成員屬性對應的類類型,所以通常不需要提供定義。
cascade
屬性:CascadeType[]
類型。該屬性定義類和類之間的級聯關系。定義的級聯關系將被容器視為對當前類對象及其關聯類對象采取相同的操作,而且這種關系是遞歸調用的。cascade的值只能從CascadeType.PERSIST
(級聯新建)、CascadeType.REMOVE
(級聯刪除)、CascadeType.REFRESH
(級聯刷新)、CascadeType.MERGE
(級聯更新)中選擇一個或多個。還有一個選擇是使用CascadeType.ALL
,表示選擇全部四項。
fetch
屬性:FetchType類型的屬性
。可選擇項包括:FetchType.EAGER
和FetchType.LAZY
。FetchType.EAGER
表示關系類(本例是OrderItem類)在主類加載的時候同時加載,FetchType.LAZY
表示關系類在被訪問時才加載。默認值是FetchType.LAZY
。@OrderBy(value = "id ASC")注釋指明加載元組時按id的升序排序(降序 "DESC") Person.class @OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person") public IDCard getIdcard() { return idcard; } public void setIdcard(IDCard idcard) { this.idcard = idcard; }
ManyToMany
文章多對多關系