What did you do today
-
日志門面有:jcl(Apache Commons Logging), slf4j,
jboss-logging(不是服務(wù)大眾的)枯怖。日志實現(xiàn)有:log4j, log4j2,logback,jul(java.util.logging)能曾。公司的日志框架選型是slf4j + log4j2《认酰現(xiàn)在捋一捋他們之間的關(guān)系寿冕,進行jar包總結(jié)。- log4j1 : log4j.jar有l(wèi)og4j的全部內(nèi)容驼唱。
- log4j2:log4j-api包含log4j2定義的api,log4j-core是log4j2上述api的實現(xiàn)玫恳。
- logback:logback-core是logback的核心包,logback-classic是logback實現(xiàn)了slf4j的api京办。
- jcl: commons-logging包含jcl的全部原生內(nèi)容,log4j-jcl是jcl到log4j2的橋梁惭婿,jcl-over-slf4j是jcl到slf4j的橋梁。
-
當我們有slf4j轉(zhuǎn)向某一個實現(xiàn)的日志框架需求時該怎么做呢审孽?如果使用slf4j的api進行編程浑娜,底層需要使用log4j1來進行實際的日志輸出,這時候就需要slf4j-log4j12來進行橋接了筋遭。類似的jar還有很多暴拄。
- slf4j-jdk14:slf4j到j(luò)ul的橋梁。
- slf4j-log4j12: slf4j到log4j的橋梁编饺。
- log4j-slf4j-impl: slf4j到log4j2的橋梁。
- logback-classic: slf4j到logback的橋梁透且。
- slf4j-jcl: slf4j到j(luò)cl的橋梁。
-
如果某一個實際的日志框架轉(zhuǎn)向slf4j秽誊。
- jul-to-slf4j:jul適配slf4j。
- log4j-over-slf4j:log4j2適配slf4j锅论。
- jcl-over-slf4j:apache common logging適配slf4j。
-
Lombok插件的使用怒坯,我們首先要安裝Lombok插件,然后在pom配置lombok的maven剔猿。
這里我只會記錄一些我生疏的注解,那些常用的注解不再重復(fù)了嬉荆。具體的Lombok的操作和常用注解,請看這篇文章IDEA入門(1)--lombok和Junit generator2插件的運用
image.png@RequiredArgsConstructor:一般配合@NonNull注解使用弄慰,會自動生成一個構(gòu)造方法蝶锋,里面的參數(shù)列表為被@NonNull注解的成員變量。示例:我們創(chuàng)建Coder對象的時候扳缕,可選擇這個構(gòu)造器。 Coder coder1 = new Coder("cmazxiaoma", "root");
@FieldDefaults(level = AccessLevel.PRIVATE):表示所有的屬性默認訪問修飾符都是PRIVATE躯舔。如果屬性的訪問修飾符有private驴剔,public丧失,protected的話,我們可以單獨具體到屬性上進行注解布讹,就不用注解在類上了琳拭。
-
@Accessors(fluent = true):代表我們創(chuàng)建對象的時候白嘁,可以支持流式風格。示例:Coder coder = new Coder().userName("cmazxiaoma").password("root").age(21); userName()和password()都是返回當前類本身絮缅,跟Java建造者設(shè)計模式是一樣的。
image.png @UtilityClass:使用該注解呼股,會為當前類創(chuàng)建一個私有無參構(gòu)造方法,不可實例化屎开,代表這是一個工具類。
@Slf4j:日志注解奄抽,使用該注解會創(chuàng)建一個log屬性,我們可以進行相關(guān)的日志處理逞度。相關(guān)類似的日志注解還有@Log,@Log4j档泽,@Log4j2,@CommonsLog揖赴。
@NonNull:我們可以預(yù)防空指針。使用Lombok的好處燥滑,看下面的代碼對比顯而易見。@NonNull為我們節(jié)省了2行代碼赃蛛。
@UtilityClass
@Slf4j
public class CodeUntils {
public static void hello() {
log.info("hello");
}
public static void printUserNameAsNonNull(@NonNull Coder coder) {
log.info("userName = {}", coder.userName());
}
public static void printUserName(Coder coder) {
if (coder == null) {
throw new NullPointerException("coder");
}
log.info("userName = {}", coder.userName());
}
}
MySQL命令, show processlist可以查看線程的執(zhí)行狀態(tài)呕臂。Sleep狀態(tài)通常代表資源未釋放肪跋,如果是通過連接池,sleep狀態(tài)應(yīng)該恒定在一定數(shù)量內(nèi)。
MAVEN命令, mvn clean package -Dmaven.test.skip=true。對項目進行編譯打包的時候跳過單元測試易桃。
MAVEN管理褥琐,maven默認會把src/main/resources路徑下的所有配置文件和src/main/java下的所有java文件打包到target文件夾下的classes下面晤郑,但是我們也會在src/main/java下放置一些mapper.xml配置文件。如果不做相關(guān)的處理造寝,那我們打包后的項目可能會找不到這些必要的資源,所以要進行如下配置诫龙。
<build>
<!--War built name-->
<finalName>cmazxiaoma</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*</include>
<include>*/*</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
What to do tomorrow
- 明天主要看一下Spring Security相關(guān)的配置代碼。
Summary
感覺自己的效率很低签赃,看代碼的速度很慢,真的是菜雞一只歹嘹。