fix: isolate application datasource from readonly platform

master
chenyuan 4 weeks ago
parent 031a8a3998
commit c085ee2330

@ -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();
}
}

@ -1,8 +1,10 @@
package com.yau.digitalrmb; package com.yau.digitalrmb;
import com.zaxxer.hikari.HikariDataSource;
import org.flywaydb.core.Flyway; import org.flywaydb.core.Flyway;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
@ -15,10 +17,25 @@ class ApplicationContextTest {
@Autowired @Autowired
private Flyway flyway; private Flyway flyway;
@Autowired
@Qualifier("dataSource")
private HikariDataSource applicationDataSource;
@Autowired
@Qualifier("platformReadOnlyDataSource")
private HikariDataSource platformReadOnlyDataSource;
@Test @Test
void baselineMigrationIsApplied() { void baselineMigrationIsApplied() {
assertThat(flyway.info().applied()) assertThat(flyway.info().applied())
.extracting(migration -> migration.getVersion().getVersion()) .extracting(migration -> migration.getVersion().getVersion())
.contains("0"); .contains("0");
} }
@Test
void applicationDatasourceIsSeparateAndWritable() {
assertThat(applicationDataSource).isNotSameAs(platformReadOnlyDataSource);
assertThat(applicationDataSource.isReadOnly()).isFalse();
assertThat(platformReadOnlyDataSource.isReadOnly()).isTrue();
}
} }

Loading…
Cancel
Save