<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # springboot ![](https://img.kancloud.cn/c0/48/c0489e0528e76951e2634718d11cea29_1116x484.png) --- **加這個maven,配置的時候會給提示** ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> ~~~ ## 自定義properties文件 在spring boot啟動類或配置類中添加以下注解,可在啟動時載入自定義的配置文件,**不能加載yaml** ~~~ @PropertySource("classpath:config/xxx.properties") ~~~ 如果要同時載入多個文件 ~~~ @PropertySource(value={"classpath:config/a.properties","classpath:config/b.properties"}) ~~~ ## 批量注入到類變量 在properties中配置兩個以a為前綴的參數 ~~~ a.key1=values1 a.key2=values2 ~~~ 在JAVA中用`@ConfigurationProperties`將以a為前綴的參數注入到當前變量中,需要有`setXxx()`方法. 告訴這個類的屬性都是配置文件里的屬性,prefix 指定讀取配置文件的前綴。 ~~~ @RestController @ConfigurationProperties(prefix = "a") public class SampleController { private String key1; private String key2; ~~~ ## 適合多處使用 配置文件先注入到配置類中,然后再使用配置類 首先配置文件為application.properties ~~~ jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/app jdbc.username=root jdbc.password=root jdbc.desc=${jdbc.url}--${jdbc.driverClassName} ~~~ 然后寫個配置類 ~~~ import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; //編寫配置文件的屬性的(prefix是配置文件中前綴的意思,要和配置文件對應) @ConfigurationProperties(prefix = "jdbc") @Data @Component public class JdbcProperties { private String driverClassName; private String url; private String username; private String password; } ~~~ idea中去除紅線 ![](https://img.kancloud.cn/97/2d/972dd6630015574ca6e1bd501bcf7afd_930x620.png) 然后要把這些配置使用起來的話 指定下就行 ~~~ @Configuration //指定要用的配置屬性,找ConfigurationProperties被這個配置過的,括號指定是那個 @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfig { //這邊參數就可以直接注入進來了,返回的在spring容器里面 @Bean public DataSource dataSource(JdbcProperties jdbcProperties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; } } ~~~ ## 適合自己使用 ~~~ ConfigurationProperties(prefix="") ~~~ 這個也可以用在類上,根據前綴找配置文件,然后給類的屬性set值 還有就是在方法上把配置文件直接注入了 ~~~ @Bean //要使用以jdbc開頭這個屬性,檢查你返回的類有沒有這個屬性的setXX方法,有就自動注入 @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource() { return new DruidDataSource(); } ~~~ 外加個配置文件 ## 一些注解 `@SpringBootConfiguration`和`@Configuration`是一個應用中只能存在一個 `@EnableAutoConfiguration`是啟動自動配置開關,是猜測想要怎么配置bean 掃描包`@ComponentScan`默認是掃描當前包和他子包,如果你把啟動文件放到其他地方,可以重寫這個注解來標注要掃哪些包 看springboot源碼: `prefix = "server"` 表示SpringBoot配置文件中的前綴,SpringBoot會將配置文件中以server開始的屬性映射到該類 的字段中。 ~~~ server.port=8888 #當前web應用的名稱,url的前綴 server.servlet.context-path=/demo ~~~ `@ConditionalOnMissingBean`這個表示如果你沒配置他就生效,你配置了他就不生效,默認配置,可覆蓋的意思 ## 編碼 ~~~ server.tomcat.uri-encoding=UTF-8 spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true spring.messages.encoding=UTF-8 ~~~ ## 日志 ~~~ # DETECT:會檢查終端是否支持ANSI,是的話就采用彩色輸出(推薦項) # NEVER:禁用ANSI-colored輸出(默認項),ALWAYS總是 spring.output.ansi.enabled=DETECT # level后面是包,可以精細到包層級,TRACE < DEBUG < INFO < WARN < ERROR < FATAL。 logging.level.root=info #logging.level.com=debug #logging.level.root=WARN #logging.level.org.springframework.web=DEBUG #logging.level.org.hibernate=ERROR # 啟動的時候 有大量的條件資源評估報告 logging.level.org.springframework.boot.autoconfigure=error # 日志輸出到文件中 logging.file=/xx # 日志輸出到文件夾中 #logging.path=mylog/test/ ~~~ >簡單分析一下,日志分為以下部分 >時間日期:精確到毫秒 >日志級別:ERROR, WARN, INFO, DEBUG or TRACE >進程ID >分隔符:— 標識實際日志的開始 >線程名:方括號括起來(可能會截斷控制臺輸出) >Logger名:通常使用源代碼的類名 >日志內內容 **日志組** 能夠將相關記錄器組合在一起以便可以同時配置它們通常很有用. 了解決這個問題,Spring Boot允許您在Spring中定義日志記錄組 。 application.properties ~~~ logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat logging.level.tomcat=TRACE ~~~ Spring Boot包含以下預定義的日志記錄組,可以直接使用: | 名稱 | 記錄器 | | --- | --- | | web | org.springframework.core.codec, org.springframework.http,[org.springframework.web](http://org.springframework.web/) | | sql | org.springframework.jdbc.core, org.hibernate.SQL | # pom.xml指定啟動類 在上面的插件源碼中還有一個${start-class},當我們的項目中有多個main啟動類時,通過在pom.xml中覆蓋這一參數,可以指定從哪一個類啟動 ~~~ <properties> <java.version>1.8</java.version> <start-class>com.xxx.啟動類</start-class> </properties> ~~~ # 外部配置文件 下面介紹幾種常見的加載配置的順序。 1. 命令行參數運行,所有的配置都可以在命令行上執行,多個配置空格隔開。 ~~~ java -jar springboot-0.0.1-SNAPSHOT.jar --server.port=9999 --sercer.context-path=/spring ~~~ 2. jar 包目錄下的 application-{profile}.properties (或yml)文件 3. jar 包里的 application-{profile}.properties (或yml)文件 4. jar 包目錄下的 application.properties (或yml)文件 5. jar 包里下的 application.properties (或yml)文件 # 環境屬性綁定 **簡單類型** 在環境變量中通過小寫轉換與`.`替換`_`來映射配置文件中的內容,比如:環境變量`SPRING_JPA_DATABASEPLATFORM=mysql`的配置會產生與在配置文件中設置`spring.jpa.databaseplatform=mysql`一樣的效果。 **List類型** 由于環境變量中無法使用`[`和`]`符號,所以使用`_`來替代。任何由下劃線包圍的數字都會被認為是`[]`的數組形式。比如: ~~~ MY_FOO_1_ = my.foo[1] MY_FOO_1_BAR = my.foo[1].bar MY_FOO_1_2_ = my.foo[1][2] ~~~ 另外,最后環境變量最后是以數字和下劃線結尾的話,最后的下劃線可以省略,比如上面例子中的第一條和第三條等價于下面的配置: ~~~ MY_FOO_1 = my.foo[1] MY_FOO_1_2 = my.foo[1][2] ~~~ # 系統屬性綁定 **簡單類型** 系統屬性與文件配置中的類似,都以移除特殊字符并轉化小寫后實現綁定,比如下面的命令行參數都會實現配置`spring.jpa.databaseplatform=mysql`的效果: ~~~ -Dspring.jpa.database-platform=mysql -Dspring.jpa.databasePlatform=mysql -Dspring.JPA.database_platform=mysql ~~~ **List類型** 系統屬性的綁定也與文件屬性的綁定類似,通過`[]`來標示,比如: ~~~ -D"spring.my-example.url[0]=http://example.com" -D"spring.my-example.url[1]=http://spring.io" ~~~ 同樣的,他也支持逗號分割的方式,比如: ~~~ -Dspring.my-example.url=http://example.com,http://spring.io ~~~ # Binder綁定 在Spring Boot 2.0中增加了新的綁定API來幫助我們更容易的獲取配置信息。 **application.properties** ~~~ com.didispace.foo=bar #推薦使用全小寫配合-分割符的方式來配置 com.didispace.database-platform=sql #使用[]來定位列表類型 #也支持逗號分隔方式,兩種方式等價 #com.didispace.post=Why Spring Boot,Why Spring Cloud com.didispace.post[0]=Why Spring Boot com.didispace.post[1]=Why Spring Cloud #Map類型的定義格式如下 com.didispace.posts[0].title=Why Spring Boot com.didispace.posts[0].content=It is perfect! com.didispace.posts[1].title=Why Spring Cloud com.didispace.posts[1].content=It is perfect too! ~~~ **PostInfo** ~~~ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties public class PostInfo { private String title; private String content; } ~~~ **FooProperties** ~~~ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "com.didispace") public class FooProperties { private String foo; public String getFoo() { return foo; } public String getDatabasePlatform() { return databasePlatform; } private String databasePlatform; } ~~~ **啟動類** ~~~ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.context.ApplicationContext; import java.util.List; @SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(Application.class, args); Binder binder = Binder.get(context.getEnvironment()); // 綁定簡單配置 FooProperties foo = binder.bind("com.didispace", Bindable.of(FooProperties.class)).get(); System.out.println(foo.getFoo()); // 綁定List配置 List<String> post = binder.bind("com.didispace.post", Bindable.listOf(String.class)).get(); System.out.println(post); List<PostInfo> posts = binder.bind("com.didispace.posts", Bindable.listOf(PostInfo.class)).get(); System.out.println(posts); // 讀取配置 System.out.println(context.getEnvironment().containsProperty("com.didispace.database-platform")); System.out.println(context.getEnvironment().containsProperty("com.didispace.databasePlatform")); } } ~~~ 還可以這樣用 ~~~ List people = Binder.get(environment) .bind("my.property", Bindable.listOf(PersonName.class)) .orElseThrow(IllegalStateException::new); ~~~ **測試** ~~~ bar [Why Spring Boot, Why Spring Cloud] [PostInfo(title=Why Spring Boot, content=It is perfect!), PostInfo(title=Why Spring Cloud, content=It is perfect too!)] true false ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看