轉(zhuǎn)自http://coder520.com/
1、如果使用jndi數(shù)據(jù)源,那些賬號密碼得設(shè)置在tomcat松蒜,這樣就無法使用springboot,但是安全已旧,因為寫在dev配置文件里其他開發(fā)人員都可以看到秸苗。
2、springboot的單元測試运褪,進(jìn)行單元測試這樣就不用每次都啟動整個項目惊楼,請求的controller端口
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MamabikeApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MamabikeApplicationTests {
@Autowired
private TestRestTemplate restTemplate; //模擬http請求,訪問rest資源
@LocalServerPort
private int port; //使用隨機(jī)端口
@Test
public void contextLoads() {
String result = restTemplate.getForObject("/user/hello",String.class);
System.out.println(result);
}
}
3秸讹、springboot默認(rèn)使用jackjson去把對象轉(zhuǎn)換為json檀咙,但是jackson效率比較低,fastjson比較高璃诀,我們選擇fastjson去替換jackson弧可,首先pom需要引入依賴,springboot整合fastjson很簡單劣欢,只需要在Application類里配置fastjson的bean就行棕诵。
/**
* Author ljs
* Description 整合fastjson,替換默認(rèn)的jackjson
* Date 2018/8/30 16:00
**/
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
HttpMessageConverter<?> converter = fastConverter;
return new HttpMessageConverters(converter);
}
判斷是否整合fastjson凿将,fastjson和jackjson有個最重要的區(qū)別校套,字段的值為null話,fastjson是不能轉(zhuǎn)換的就是不輸出的牧抵,而jackjson是仍然會輸出null搔确。
之前的jackjson輸出:headimg為null
{"id":1,"nickname":"wang","mobile":"18980840843","headImg":null,"verifyFlag":2,"enableFlag":1}
替換了fastjson之后,null的值已經(jīng)都不輸出顯示了。這樣就表示替換成功
{"verifyFlag":2,"mobile":"18980840843","nickname":"wang","id":1,"enableFlag":1}
4灭忠、springboot讀取配置文件也很容易,例如要讀取application.yml里mamabike,只需要注解value這樣就獲取的到mamabike了座硕。
@Value("${spring.application.name}")
private String name;
獲取多個值和切分后面會遇到弛作。但是yml也是有缺點,一些特殊符號不支持华匾,例如*映琳,yml主要放核心配置机隙,用戶配置放在properties文件。
5萨西、日志的整合
使用logback替換log4j有鹿,之前整合的log4j所有的error,debug等等日志都放在一塊logback可以分類但是太麻煩谎脯,使用logback可以進(jìn)行分類葱跋,分別放到不同文件中。還可以按dao源梭,controller下的error娱俺,exception分類。
5.1废麻、導(dǎo)入logback的依賴和common的依賴,可以使用更高版本荠卷,但是版本號一定得相同
logback主要核心依賴
<!--logback-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.6</version>
</dependency>
其中l(wèi)ogback-access可以不加
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
5.2、創(chuàng)建logback配置文件
不用自己寫烛愧,只需要復(fù)制然后改下目錄就行油宜。
兩個修改,設(shè)置存放日志的路徑,注意不要寫d:什么怜姿,因為你這個系統(tǒng)很有可能是在lunix下部署的
<property name="LOG_HOME" value="/logs/mamabike/" />
把mamabike包下的所有error輸出放在normallog和errorlog里慎冤。我們也可以指定user模塊或者其他模塊。例如:mamabike.user社牲。
<logger name="com.ljs.mamabike" level="debug" >
<appender-ref ref="normalLog" />
<appender-ref ref="errorLog" />
</logger>
5.3粪薛、整合logbcak
也很簡單只需要在application里寫上
#log
logging:
config: classpath:logback.xml
5.4、最后maven不會自動幫我們編譯這些xml搏恤,如果不編譯到target违寿,工程就用不到logback,所以像之前的mapper.xml一樣熟空,需要在pom.xml下的resource寫上,讓它把resource里的yml藤巢,properties,xml都給編譯上息罗。
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>*.yml</include>
<include>*.properties</include>
<include>*.xml</include>
</includes>
</resource>
5.5掂咒、測試logback是否整合成功
步驟,寫個service讓數(shù)據(jù)庫插入數(shù)據(jù)迈喉,故意拋出異常绍刮。然后再寫個test方法,調(diào)用發(fā)現(xiàn)這不是我們想要的sql異常挨摸,
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ljs.mamabike.user.service.UserService.login
debug
發(fā)現(xiàn)userService并沒有注入而是注入了ibatis下的類孩革,而ibatis下的類又沒有l(wèi)ogin方法,所以報錯得运。
解決方法是膝蜈,使用@Qualifier("userServiceImpl")指定bean注入锅移。
解決之后,這就是我們想要的異常了。
Error updating database. Cause: java.sql.SQLException: Field 'mobile' doesn't have a default value
但是查看error.log里并沒有記錄饱搏,原因是這錯誤需要我們自己記錄非剃。注意logger和loggerfactory都是s'j
@Test
public void test(){
Logger logger = LoggerFactory.getLogger(MamabikeApplicationTests.class);
try{
userService.login();
}catch (Exception e){
logger.error("出錯了", e);
}
}
現(xiàn)在error里就有了。而且exception里沒有記錄達(dá)到分類的效果推沸。
6备绽、加速開發(fā)插件
例如省略get和set方法,還有可以省略Logger這條語句坤学。
首先需要引入jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
</dependency>
然后按照插件setting→plugins→Browse repositories疯坤,輸入lom后選擇install plugin,這里翻墻下載不了深浮,所以https://blog.csdn.net/m0_37597572/article/details/81185052
最后加上注解
刪除get和set然后給類加上@Data压怠。
刪掉logger語句,給類加上@@Slf4j飞苇。然后使用log就行了菌瘫。