From c085ee2330ddb97b45152a1b5b993eb7d9278ce5 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Mon, 3 Aug 2026 14:28:04 +0800 Subject: [PATCH] fix: isolate application datasource from readonly platform --- .../ApplicationDataSourceConfig.java | 20 +++++++++++++++++++ .../digitalrmb/ApplicationContextTest.java | 17 ++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/com/yau/digitalrmb/shared/infrastructure/persistence/ApplicationDataSourceConfig.java diff --git a/src/main/java/com/yau/digitalrmb/shared/infrastructure/persistence/ApplicationDataSourceConfig.java b/src/main/java/com/yau/digitalrmb/shared/infrastructure/persistence/ApplicationDataSourceConfig.java new file mode 100644 index 0000000..744a8d0 --- /dev/null +++ b/src/main/java/com/yau/digitalrmb/shared/infrastructure/persistence/ApplicationDataSourceConfig.java @@ -0,0 +1,20 @@ +package com.yau.digitalrmb.shared.infrastructure.persistence; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.autoconfigure.DataSourceProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties(DataSourceProperties.class) +public class ApplicationDataSourceConfig { + @Bean(name = "dataSource", destroyMethod = "close") + @Primary + @ConfigurationProperties("spring.datasource.hikari") + public HikariDataSource applicationDataSource(DataSourceProperties properties) { + return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); + } +} diff --git a/src/test/java/com/yau/digitalrmb/ApplicationContextTest.java b/src/test/java/com/yau/digitalrmb/ApplicationContextTest.java index 952a65c..356c8a9 100644 --- a/src/test/java/com/yau/digitalrmb/ApplicationContextTest.java +++ b/src/test/java/com/yau/digitalrmb/ApplicationContextTest.java @@ -1,8 +1,10 @@ package com.yau.digitalrmb; +import com.zaxxer.hikari.HikariDataSource; import org.flywaydb.core.Flyway; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; @@ -15,10 +17,25 @@ class ApplicationContextTest { @Autowired private Flyway flyway; + @Autowired + @Qualifier("dataSource") + private HikariDataSource applicationDataSource; + + @Autowired + @Qualifier("platformReadOnlyDataSource") + private HikariDataSource platformReadOnlyDataSource; + @Test void baselineMigrationIsApplied() { assertThat(flyway.info().applied()) .extracting(migration -> migration.getVersion().getVersion()) .contains("0"); } + + @Test + void applicationDatasourceIsSeparateAndWritable() { + assertThat(applicationDataSource).isNotSameAs(platformReadOnlyDataSource); + assertThat(applicationDataSource.isReadOnly()).isFalse(); + assertThat(platformReadOnlyDataSource.isReadOnly()).isTrue(); + } }