Spring Boot 學習筆記(4):配置properties(1)

HOWD發表於2018-09-27

SpringBoot 是為了簡化 Spring應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程

application.properties的使用,主要用來配置資料庫連線、日誌相關配置等。除了這些配置內容之外,本文將具體介紹一些在application.properties配置中的其他特性和使用方法。

配置檔案

SpringBoot使用一個全域性的配置檔案,配置檔名是固定的;

•application.properties

•application.yml

配置檔案的作用:修改SpringBoot自動配置的預設值;SpringBoot在底層都給我們自動配置好;

在配置檔案中直接寫:

name=Isea533
server.port=8080
複製程式碼

.yml格式的配置檔案如:

name: Isea533
server:
    port: 8080
複製程式碼

注意:使用.yml時,屬性名的值和冒號中間必須有空格,如name: HOWD正確,name:HOWD就是錯的。

屬性配置檔案的位置

spring會從classpath下的/config目錄或者classpath的根目錄查詢application.propertiesapplication.yml。/config優先於classpath根目錄

自定義屬性配置

在 application.properties 寫入如下配置內容

    my1.age=21
    my1.name=HOWD
複製程式碼

然後定義demoProperties.java檔案,用來對映我們在application.properties中的內容,這樣一來我們就可以通過操作物件的方式來獲得配置檔案的內容了


@Component
@ConfigurationProperties(prefix = "my1")
public class demoProperties {

    private int age;
    private String name;
	// 省略 get set
}
複製程式碼

Spring Boot 學習筆記(4):配置properties(1)

當你加入ConfigurationProperties註解時,便變彈出這個警告,順著這條警告右邊的open Documentation會開啟Spring Boot官方文件。

B.3 Generating Your Own Metadata by Using the Annotation Processor You can easily generate your own configuration metadata file from items annotated with @ConfigurationProperties by using the spring-boot-configuration-processor jar. The jar includes a Java annotation processor which is invoked as your project is compiled. To use the processor, include a dependency on spring-boot-configuration-processor.

With Maven the dependency should be declared as optional, as shown in the following example:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>
複製程式碼

大致意思是為了讓 Spring Boot 更好的生成配置後設資料檔案,也只是說要新增依賴,也沒說如果不這樣做會造成什麼影響。

接著去pom.xml去新增上面的依賴即可。

如果你是Gradle,請看官方文件Generating Your Own Metadata by Using the Annotation Processor

接下來定義controller來注入demoProperties,測試我們寫的程式碼是否正確。

@RequestMapping("/demo")
@RestController
public class PropertiesController {
    private static final Logger log = LoggerFactory.getLogger(PropertiesController.class);

    private final demoProperties demoProperties;

    @Autowired
    public PropertiesController(demoProperties demoProperties) {
        this.demoProperties = demoProperties;
    }

    @GetMapping("/1")
    public demoProperties myProperties1() {
        log.info("=================================================================================================");
        log.info(demoProperties.toString());
        log.info("=================================================================================================");
        return demoProperties;
    }

}
複製程式碼

啟動之後,在瀏覽器輸入http://localhost:8080/demo/1

再看控制檯,像我這樣就完成了。

2018-09-27 15:32:32.587  INFO 3868 --- [nio-8080-exec-3] com.example.demo.PropertiesController    : =================================================================================================
2018-09-27 15:32:32.587  INFO 3868 --- [nio-8080-exec-3] com.example.demo.PropertiesController    : DemoProperties{age=21, name='HOWD'}
2018-09-27 15:32:32.587  INFO 3868 --- [nio-8080-exec-3] com.example.demo.PropertiesController    : =================================================================================================
複製程式碼

多環境化配置

在真實開發中,會有多個環境,不同環境連線不同的資料庫,正式總不可能連線測試的資料庫。 這個時候就需要spring.profile.active,它的格式為application-{profile}.properties,這裡的 application 為字首不能改,**{profile}**是我們自己定義的。在resource路徑下建立三個.properties字尾的檔案。

  • application-dev.properties
  • application-test.properties
  • application-prod.properties

在檔案中分別對應不同的server.servlet.context-path=/xxx xxx指上面的dev、test、prod。

接著在application.properties配置檔案中寫入spring.profiles.active=dev,這個時候我們再次訪問 http://localhost:8080/demo/1會發現沒用,因為我們設定了它的context-path=/dev,所以新的路徑就是 http://localhost:8080/dev/demo/1,由此可以看出來我們設定不同的配置讀取的是不一樣的。

隨機數屬性

Spring Boot 的屬性配置檔案中 ${random} 可以用來生成各種不同型別的隨機值,從而簡化了程式碼生成的麻煩,例如 生成 int 值、long 值或者 string 字串。

32位隨機字串
rand.str = ${random.value}
隨機int型別
rand.intid = ${random.int}
隨機long型別
rand.longid = ${random.long}
100以內的隨機int型別
rand.number = ${random.int(100)}
0-100範圍內的隨機int型別
rand.range = ${random.int[0,100]}
複製程式碼

banner

然後說一個好玩的。

大家再執行專案時,應該都會看到一個大大的Spring Boot

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.5.RELEASE)
複製程式碼

這個是可以修改的,方法也非常簡單。 只要在resource路徑下建立一個banner資料夾,然後建立banner.txt,把你喜歡的圖案複製進去。

進入這個網站 根據自己的喜好建立喜歡的圖案 patorjk.com/software/ta…

  _    _  ______          _______
| |  | |/ __ \ \        / /  __ \
| |__| | |  | \ \  /\  / /| |  | |
|  __  | |  | |\ \/  \/ / | |  | |
| |  | | |__| | \  /\  /  | |__| |
|_|  |_|\____/   \/  \/   |_____/
複製程式碼

我根據我的名字建立了一個 然後放入banner.txt

執行就可以看到效果拉!

如果你要放.jpg .gif 格式也可以 只要在properties配置檔案中 加上 spring.banner.image.location=banner/xxx.jpg

然後執行就可以看到效果了,不過我試了幾張照片 都不好看:(

還有在banner.txt中,可以顯示spring-boot的版本 在圖案的下方加上 ${spring-boot.version} 即可

雖然沒什麼卵用,但就是很好玩的樣子,哈哈哈!

感謝你花時間讀到結尾!:D

後端一枚,默默搬磚擼程式碼,如果覺得不錯歡迎關注我的公眾號

Spring Boot 學習筆記(4):配置properties(1)

相關文章