zoukankan      html  css  js  c++  java
  • springboot---学习之路

    Spring Boot允许使用properties文件、yaml文件或者命令行参数作为外部配置

    使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment抽象或绑定到结构化对象来访问。

    以前使用Spring的时候需要通过@PropertySource指明properties文件位置,然后通过@value注入.

    常规属性配置

    在properties文件中增加几个属性

    server.port=8081
    server.context-path=/demo
    #声明一个name属性
    user.name=张三
    user.age=21

    Java

    package com.ibigsea.bootdemo;
     
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
     
    /**
     * 是Spring Boot项目的核心注解,主要是开启自动配置
     */
    @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
    @RestController
    public class App {
         
        @Value("${user.name}")
        private String name;
     
        @Value("${user.age}")
        private Long age;
         
        @RequestMapping("/")
        public String index(){
            return "Hello Spring Boot, name is " + name + ", age is "+ age;
        }
         
        public static void main(String[] args) {
    //      SpringApplication app = new SpringApplication(App.class);
    //      app.setBannerMode(Mode.OFF);
    //      app.run(args);
            SpringApplication.run(App.class, args);
        }
    }

    除此之外,Spring Boot 还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置

    在上面的情景下新增一个UserSetting类

    package com.ibigsea.bootdemo;
     
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
     
    @Component
    //通过该注解价值properties文件内的配置
    //通过prefix执行properties配置的前缀
    @ConfigurationProperties(prefix = "user")
    public class UserSetting {
        private String name;
        private Long age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Long getAge() {
            return age;
        }
        public void setAge(Long age) {
            this.age = age;
        }
    }

    日志配置

    Spring boot默认的输出格式

    2016-07-04 23:47:27.195  INFO 28916 --- [           main] com.ibigsea.bootlog.App                  : Starting App on sea-pc with PID 28916 (E:workspacemyworkspaceootlog	argetclasses started by bigsea in E:workspacemyworkspaceootlog)
    2016-07-04 23:47:27.201  INFO 28916 --- [           main] com.ibigsea.bootlog.App                  : No active profile set, falling back to default profiles: default
    2016-07-04 23:47:27.315  INFO 28916 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@75592f8b: startup date [Mon Jul 04 23:47:27 CST 2016]; root of context hierarchy
    2016-07-04 23:47:28.653  INFO 28916 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
    2016-07-04 23:47:30.227  INFO 28916 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
    2016-07-04 23:47:30.245  INFO 28916 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
    2016-07-04 23:47:30.245  INFO 28916 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.30
    2016-07-04 23:47:30.371  INFO 28916 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext

    时间日期 — 精确到毫秒日志级别 — ERROR, WARN, INFO, DEBUG or TRACE进程ID分隔符 — --- 标识实际日志的开始线程名 — 方括号括起来(可能会截断控制台输出)Logger名 — 通常使用源代码的类名日志内容

    默认情况下ERROR, WARN和INFO级别的消息会输出到控制台

    可以通过命令行开启DEBUG或者在properties文件中添加

    Jar -jar xx.jar --debug
    1
     

    Properties文件中添加 debug=true即可

    如果想要输出到日志文件中,那么需要在properties文件中设置logging.filelogging.path属性

    控制日志级别

    通过 logging.level.*= LEVEL(LEVEL是TRACE,DEBUG,INFO,WARN,FATAL,OFF)中的一个

    这样表示项目中所有的日志级别都是一样的.也可以精准控制到具体的一块

    ogging.level.org.springframework.web: DEBUG //org.springframework.web包下面的日志级别是DEBUG的
    logging.level.org.hibernate: ERROR //org.hibernate包下面的日志级别是ERROR
    logging.level.com.ibigsea.*: INFO //com.ibigsea包下面的日志级别是INFO

    除了Spring Boot默认的以外,还可以激活其他各种日志系统

    由于日志是在ApplicationContext被创建之前初始化,所以不可能在Spring的@Configuration文件中,通过系统属性和传统的外部配置文件依然可以让日志系统正常工作

    Profile配置

    Profile是Spring用来针对不同环境对不同配置提供支持的,全局Profile配置使用

    application-{profile}.properties 如:application-prod.properties

    在本地模拟出一个开发环境和生产环境

    创建application-prd.properties和 application-dev.properties

    项目结构

    application-dev.properties

    server.port=8081

    application-prd.properties

    server.port=8082

    application.properties

    spring.profiles.active=prd

    除了上面这种配置方式,我们还有一种更简便的方式来配置多种环境,通过命令行参数配置

    删除多余的properties文件

    application.yml

     
    server :
     port : 8081
    ---
    spring :
      profiles : dev
    server :
      port : 8082

    默认是prd环境

    在启动的时候增加参数 spring.profiles.active=dev

    右击显示菜单选择run configurations

    添加命令行参数

    OK 实验成功

    将程序打包之后 通过 java -jar xx.jar --spring.profiles.active=dev的方式启动

  • 相关阅读:
    用数据管理过程(2)——通过经验值管理项目
    用数据管理过程(3)——可预测级别的量化管理(麦当劳的管理方式)
    JMeter对Oracle数据库进行压力测试
    [置顶] Linux下的截图小工具
    [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
    使用 OpenSSL API 进行安全编程
    带外数据的接收与发送
    oracle本月、上月、去年同月第一天最后一天
    mysql查看权限的命令
    php的一个验证邮箱的正则表达式
  • 原文地址:https://www.cnblogs.com/wjt-super/p/10254129.html
Copyright © 2011-2022 走看看