• springboot搭建web项目与使用配置文件


    一、准备工作

    二、创建基础web项目

    1. maven配置

    编写M2_HOME/conf/setting.xml

    1. 指定本地maven仓库
    <localRepository>D:APP
    epository</localRepository>
    
    2. 配置远程仓库镜像(以阿里云为例)
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    
    3. 配置全局jdk版本
    <profile>
    	<id>jdk-1.8</id>
    
    	<activation>
    		<activeByDefault>true</activeByDefault> 
    		<jdk>1.8</jdk>
    	</activation>
    
    	<properties>    
    		<maven.compiler.source>1.8</maven.compiler.source>    
    		<maven.compiler.target>1.8</maven.compiler.target>    
    		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
        </properties>
    </profile>
    

    2.创建maven项目、配置pom.xml为web基础项目

    1. web项目基础依赖
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    

    3.编写启动类

    启动类需要与service、controller、dao等包同级,便于后面自动扫描

    1.启动类

    • @SpringBootApplication
      • @SpringBootConfiguration------表示是一个springboot配置类
        • @Configuration------表示是一个spring配置类,等价于spring中的配置文件xml
          • @Component------容器中的一个组件
      • @EnableAutoConfiguration------开启自动配置
        • @AutoConfigurationPackage------自动配置包,将主配置类所在包及旗下所有子包里面所有的组件扫描到springboot容器中,所以启动类需要和service等包同级
        • @Import({AutoConfigurationImportSelector.class})------给容器导入一个组件,导入的组件由AutoConfigurationImportSelector.class决定,该类会给容器导入大量的自动配置类(格式类似:xxxAutoConfiguraion),这些自动配置类来源于:spring-boot-configure/META-INF/spring.factories文件中
      • @ComponentScan------自动扫包配置
    @SpringBootApplication
    public class MySpringBootApplication {
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApplication.class,args);
        }
    }
    

    2.接口类
    当@ResponseBody加在方法上表示该方法返回的对象之间返回给浏览器,如果加载在类上,表示当前类下的所有方法都把返回对象之间返回给浏览器
    @RestController == @Controller + @ResponseBody

    @Controller
    public class Helloword {
    
        @RequestMapping("/hello")
        @ResponseBody
        public String hello() {
            return "Hello World";
        }
    }
    

    4.使用maven打包

    1.配置pom.xml文件,默认打成jar包
    <build>
        <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
        </plugins>
    </build>
    

    点击idea左下角的图标,点击maven projects => spring-boot-helloword =>
    lifecycle => package

    5.使用命令java -jar xxx.jar运行

    取target文件夹下的spring-boot-helloword-1.0-SNAPSHOT.jar,
    运行java -jar spring-boot-helloword-1.0-SNAPSHOT.jar

    5.快捷生成

    1.使用IDE生成
    2.使用spring官网地址:https://start.spring.io

    三、springboot配置文件

    1.application.properties

    • 语法
      • lv1.lv2=value
      • lv1.lv2.lv3=false
      • lists=1,2,3

    2.application.yml

    • 语法
      • key: value (注意冒号和value直接需要空格)
      • 用空格缩进来表示处于同一层级
    • 值范围
      • 字面值(普通值)直接用 k: v 来写
        • 字符串不用加上单引号或双引号
        • "":双引号里的特殊字符会表达,例如name: "zhang wang" 输出:zhang 换行 wang
        • '':单引号里的特殊字符不会表达,例如name: 'zhang wang' 输出:zhang wang
      • 对象、map
        #1.普通写法
        student:  
            name: song  
            age: 1
            
        #2.行内写法
        student: {name: song,age: 1}
        
      • 数组list、set
        #1.普通写法
        pets:
            - cat
            - dog
            - pig
        #2.行内写法
        pets: {cat,dog,pig}
        

    3.获取配置文件内容到javabean

    • 需要借助@Component注解
    • 使用 @ConfigurationProperties(prefix="beanName") 注解来关联获取配置文件内容,其中beanName表示配置文件中属性的前缀,适用于application.properties、application.yml配置文件的内容获取

    4.@ConfigurationProperties与@Value赋值的异同

    • @ConfigurationProperties:支持批量赋值、支持松散绑定(last-name等价于lastName)、不支持表达式计算、支持jsr303数据校验、支持复杂类型封装(object、map类型)
    • @Value:支持单个赋值、支持表达式计算

    5.@PropertySource

    • 含义:@ConfigurationProperties加载的是系统默认的全局配置文件(application.properties、application.yml),而@PropertySource可以读取自定义的配置文件
    • 语法:@PropertySource(value = {"classpath:person.properties"}),value可以是数组

    6.@ImportResource

    我们自己编写的xxx.xml配置文件,不会被spring和springboot识别,可以使用以下方法把xxx.xml中的bean引入到spring容器中

    • 方法一:可以在启动类(也是配置类)上,比如SpringbootApplication.java启动类上加@ImportResource(locations = {"calsspath:xxx.xml"})
    • 自定义一个配置类,标注上@Configuration,使用@Bean的方法引入组件到spring中

    7.配置文件占位符

    • 随机数
      ({random.value}、){random.int}
    • 占位符获取之前配置的值,如果没有可以用的:指定默认值
      name=aaa
      address=${name}_bbb

    8.profile环境配置

    • 方式一:多profile文件(application-{profile}.properties)
      • application-dev.properties
      • application-sit.properties
      • application-prd.properties
    #application.properties
    #激活dev环境的配置
    spring.profiles.active=dev
    
    #application-dev.properties
    server.port=8081
    
    #application-prd.properties
    server.port=8082
    
    • 方式二:yml文档快指定配置环境方式
    #application.yml
    #激活dev环境的配置
    server
        port: 8080
    spring
        profiles
            active: dev
    ---
    server
        port: 8081
    spring
        profiles: dev
    ---
    server
        port: 8082
    spring
        profiles: prd
    
    
    • 方式三:命令行方式
    1.虚拟机指定
    VM options: -Dspring.profiles.active=dev
    
    2.java命令指定
    java -jar xxx.jar --spring.profiles.active=dev
    

    9.配置文件加载位置

    • sprigboot启动会扫描以下位置的application.properties和application.yml来作为springboot的默认配置文件
    • 优先级(./config/ > ./),所以配置文件都会被加载
    • 对应重复的配置属性:高优先级会覆盖低优先级的文件配置属性
    • 对于不重复的配置属性:多文件的多属性会互补加载(都加载到springboot中)
    • 我们也可以通过配置spring.config.location来改变默认配置,仅是指定的文件优先级为最高,但是所有的配置文件还是会被一起加载到springboot,参考上面
    file类型
        ./config/
        ./
    classpath类型
        ./config/
        ./
    

    10.配置文件加载顺序

    优先级由高到低:

    • 命令行
      • 例如:java -jar xxx.jar --server.port=8085 --server.context-path=/abc
    • jar包外,带profile的
      • application-dev.properties
      • application-dev.yml
    • jar包内,带profile的
      • application-dev.properties
      • application-dev.yml
    • jar包外,不带profile的
      • application.properties
      • application.yml
    • jar包内,不带profile的
      • application-dev.properties
      • application-dev.yml

    11.配置文件的属性来源

    用好springboot配置文件的精髓
    0. 寻找配置文件和class之间关联

    1. 启动类注解@SpringBootApplication
    2. 1的依赖注解@EnableAutoConfiguration
    3. 2的依赖导入@Import({AutoConfigurationImportSelector.class}),导入自动配置选择器类
    4. AutoConfigurationImportSelector.selectImports
    5. AutoConfigurationImportSelector.getAutoConfigurationEntry
    6. AutoConfigurationImportSelector.getCandidateConfigurations()
    7. 6方法内的SpringFactoriesLoader.loadFactoryNames()
    8. SpringFactoriesLoader.loadFactoryNames()
    9. SpringFactoriesLoader.loadSpringFactories()
    10. classLoader.getResources("META-INF/spring.factories")
    11. 找到maven依赖中的spring-boot-autoconfigure2.1.7.RELEASE.jar中META-INF/spring.factories

    在spring.factories中以 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,/ 为例:
    0. WebMvcAutoConfiguration.class

    @Configuration
    @ConditionalOnWebApplication(type = Type.SERVLET)
    @ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
    @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
    @AutoConfigureOrder(-2147483638)
    @AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
    public class WebMvcAutoConfiguration {
        ...
    }
    
    1. 进入DispatcherServletAutoConfiguration.class
    @AutoConfigureOrder(-2147483648)
    @Configuration
    @ConditionalOnWebApplication(type = Type.SERVLET)
    @ConditionalOnClass({DispatcherServlet.class})
    @AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class})
    public class DispatcherServletAutoConfiguration {
        ...
    }
    
    1. 进入ServletWebServerFactoryAutoConfiguration.class
    @Configuration
    @AutoConfigureOrder(-2147483648)
    @ConditionalOnClass({ServletRequest.class})
    @ConditionalOnWebApplication(type = Type.SERVLET)
    @EnableConfigurationProperties({ServerProperties.class})
    @Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})
    public class ServletWebServerFactoryAutoConfiguration {
        ...
    }
    
    1. 进入和ServletWebServerFactoryAutoConfiguration绑定的ServerProperties.class中
    @ConfigurationProperties(
        prefix = "server",
        ignoreUnknownFields = true
    )
    public class ServerProperties {
    
        private Integer port;
        private InetAddress address;
        
        public Integer getPort() {
            return this.port;
        }
    
        public void setPort(Integer port) {
            this.port = port;
        }
    
        public InetAddress getAddress() {
            return this.address;
        }
    
        public void setAddress(InetAddress address) {
            this.address = address;
        }
        //...
    }
    
    1. 控制台判断哪些自动配置类生效
      application.properties中配置:debug=true

    2. 总结:通过ServerProperties.class中的属性可以设置application.properties中的一些关于服务器的配置文件属性,例如:server.port,同样根据其他的xxx.properties也可以学习配置springboot的配置文件

  • 相关阅读:
    搜索框的创建
    自定义非等高 Cell
    自定义等高 Cell
    表格多选删除
    聊天布局
    表格编辑
    表格折叠
    tableView 的协议方法
    UITouch
    UIDevice
  • 原文地址:https://www.cnblogs.com/songzhen/p/11484041.html
Copyright © 2020-2023  润新知