转自http://coder520.com/
1、如果使用jndi数据源,那些账号密码得设置在tomcat,这样就无法使用springboot,但是安全,因为写在dev配置文件里其他开发人员都可以看到。
2、springboot的单元测试,进行单元测试这样就不用每次都启动整个项目,请求的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; //使用随机端口
@Test
public void contextLoads() {
String result = restTemplate.getForObject("/user/hello",String.class);
System.out.println(result);
}
}
3、springboot默认使用jackjson去把对象转换为json,但是jackson效率比较低,fastjson比较高,我们选择fastjson去替换jackson,首先pom需要引入依赖,springboot整合fastjson很简单,只需要在Application类里配置fastjson的bean就行。
/**
* Author ljs
* Description 整合fastjson,替换默认的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有个最重要的区别,字段的值为null话,fastjson是不能转换的就是不输出的,而jackjson是仍然会输出null。
之前的jackjson输出:headimg为null
{"id":1,"nickname":"wang","mobile":"18980840843","headImg":null,"verifyFlag":2,"enableFlag":1}
替换了fastjson之后,null的值已经都不输出显示了。这样就表示替换成功
{"verifyFlag":2,"mobile":"18980840843","nickname":"wang","id":1,"enableFlag":1}
4、springboot读取配置文件也很容易,例如要读取application.yml里mamabike,只需要注解value这样就获取的到mamabike了。
image.png
@Value("${spring.application.name}")
private String name;
获取多个值和切分后面会遇到。但是yml也是有缺点,一些特殊符号不支持,例如*,yml主要放核心配置,用户配置放在properties文件。
5、日志的整合
使用logback替换log4j,之前整合的log4j所有的error,debug等等日志都放在一块logback可以分类但是太麻烦,使用logback可以进行分类,分别放到不同文件中。还可以按dao,controller下的error,exception分类。
5.1、导入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>
其中logback-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、创建logback配置文件
不用自己写,只需要复制然后改下目录就行。
两个修改,设置存放日志的路径,注意不要写d:什么,因为你这个系统很有可能是在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让数据库插入数据,故意抛出异常。然后再写个test方法,调用发现这不是我们想要的sql异常,
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ljs.mamabike.user.service.UserService.login
debug
发现userService并没有注入而是注入了ibatis下的类,而ibatis下的类又没有login方法,所以报错。
image.png
解决方法是,使用@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);
}
}
现在error里就有了。而且exception里没有记录达到分类的效果。
6、加速开发插件
例如省略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就行了。
网友评论