2023-03-16

[spring] Spring boot application profiles and config properties include

 最近開發一個小的 sprint boot app,有使用到 db and amqp.  原先研究的方法是使用 profile 方式來區隔相關的環境使用的 config properties. 但是,後面還是遇到疊加與重複撰寫的問題。

研究一陣子,使用 application profile + include 方式來處裡這樣多變化的組合. 


第一步

首先,  application profile 其觀念是,每一次 spring boot 還是會讀取 application.proerpties ,再去讀取設定的 application-{profile}.properties。只是後面的會蓋掉前面的設定,所以差異化要做在後面那些 profile.  因此在 application.properties 只包含最簡單的. 設定 

application.properties

application.name=Gateweb Billing Agent
spring.profiles.active=local

application-local.properties

server.port=8181

spring.config.import=db-h2.properties,amqp-test.properties

application-test.properties

server.port=8080

spring.config.import=db-test.properties,amqp-test2.properties

第二步

將相關的資料 通通分開不同的設定檔. 

db-h2.properties

spring.sql.init.mode=always
spring.sql.init.platform=h2
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=sa

##spring.datasource.schema=file:./test-data/schema-h2.sql
## Jpa Config
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.show-sql=false 

amqp-test.properties

amqp.broker.host=cougar.rmq.cloudamqp.com
amqp.broker.vhost=xelvnewm
amqp.username=xelvnewm
amqp.password=SE6RHeTCJIf6E0KrxIOkDbdrEsYx82u2


db-test.properties

# Spring DB MySql
spring.sql.init.mode=never
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://test.mysql.database.azure.com:3306/test?useSSL=true&requireSSL=false
spring.datasource.username=test
spring.datasource.password=testpassword

# MySql Jpa Config
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.show-sql=true
spring.jpa.open-in-view=false

amqp-test2.properties

amqp.broker.host=cougar.rmq.cloudamqp.com
amqp.broker.vhost=xelvnewmsdsd
amqp.username=xelvnewmsdsd
amqp.password=SE6RHeTCJIf6E

第三步

修改 build.gradle 新增 相關 bootRun task 

tasks.register('bootRunLocal') {
dependsOn 'bootRun'
bootRun.systemProperty('spring.profiles.active', 'local')
}

tasks.register('bootRunTest') {
dependsOn 'bootRun'
bootRun.systemProperty('spring.profiles.active', 'test')
}





沒有留言:

張貼留言