美文网首页单车
单车第二天

单车第二天

作者: shenyoujian | 来源:发表于2018-08-30 21:57 被阅读11次

    转自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就行了。

    相关文章

      网友评论

        本文标题:单车第二天

        本文链接:https://www.haomeiwen.com/subject/ztarwftx.html