我想根據“組態檔”設定注釋的值。
讓我用一個例子來解釋;
@Entity
//PROD
@Table(name="users", schema="JDEPRD")
//DEV
//@Table(name="users", schema="JDEDEV")
在上面的示例中,我們可以看到活動的“組態檔”是 PROD,但假設我們要使用 DEV 組態檔,我們必須從 PROD 中注釋 @Table 注釋并取消注釋 DEV @Table 注釋。
如果這只是針對一個物體,那將不成問題,但我有很多物體都有這種情況,所以我不認為這是使用這種即興“組態檔”的方式。
你知道有什么辦法可以解決這種情況嗎?
uj5u.com熱心網友回復:
我不會在表中包含架構資訊,我會使用 application.properties 來控制它,它具有多個基于組態檔的屬性。
spring.datasource.url=jdbc:postgresql://localhost:5432/schema-dev
提供您的活動組態檔運行時-Dspring.active.profile=dev
您可以使用https://www.baeldung.com/spring-profiles#3-multi-document-files甚至多個檔案。
my.prop=used-always-in-all-profiles
#---
spring.config.activate.on-profile=dev
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=root
spring.datasource.password=root
#---
spring.config.activate.on-profile=production
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
uj5u.com熱心網友回復:
注釋是編譯時概念,屬性是構建時或運行時概念。由于注釋是,如果以這種方式配置,類檔案的一部分,則無法在運行時更改它們。
但也許你可以用像 cglib 這樣的庫來改變它。但是:正如 Raghu Dinka 所說,使用兩個不同的資料庫或方案要好得多。一種用于開發,一種用于生產。這種操作必須在 OR-Mapper 分析類之前完成。
另一種方法可能是為更改表定義的 java 編譯器實作編譯器插件。但這也不是一種好的風格。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450054.html
