我正在使用Spring Boot和HikariCP,并尝试将与MySQL数据库的连接设置为只读。但是所有尝试都失败了。我正在运行Spring Boot 2.0.5和HikariCP 3.2.0,以及MySQL连接器8.0.11。
我有2个数据源-1个用于写,另一个用于读。我试图在Spring Boot application.properties文件中设置属性,但是 catalina.out 日志中显示的配置显示readOnly设置为false。
我有一个配置类,该类使用application.properties文件中的属性来配置池,但是似乎无法将其从false
更改为 readOnly 属性true
。
我还尝试在setReadOnly(true);
方法中放入dataSource()
语句-不起作用。
@Configuration
@EnableTransactionManagement
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "reader.datasource")
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = {"com.abc.data.reader.repo"})
public class ReaderDataSourceConfig extends HikariConfig {
@Bean(name = "readerDataSource")
public DataSource dataSource() {
return new HikariDataSource(this);
}
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,@Qualifier("readerDataSource")
DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.abc.repo")
.persistenceUnit("reader")
.build();
}
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
以及属性文件中的行:
#HikariCP Reader config
reader.datasource.jdbc-url=jdbc:mysql://...
reader.datasource.username=###
reader.datasource.password=#####
reader.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
reader.datasource.maximum-pool-size=10
reader.datasource.connection-timeout=60000
reader.datasource.max-lifetime=1800000
reader.datasource.minimum-idle=10
reader.datasource.validation-timeout=15000
reader.datasource.read-only=true ***tried multiple variations***
reader.datasource.hikari.read-only=true
reader.datasource.readOnly=true
reader.dataSource.cachePrepStmts=true
reader.dataSource.prepStmtCacheSize=250
reader.dataSource.prepStmtCacheSqlLimit=2048
reader.dataSource.useServerPrepStmts=true
reader.dataSource.useLocalSessionState=true
reader.dataSource.rewriteBatchedStatements=true
reader.dataSource.cacheResultSetMetadata=true
reader.dataSource.cacheServerConfiguration=true
reader.dataSource.elideSetAutoCommits=true
reader.dataSource.maintainTimeStats=false
reader.datasource.pool-name=ReaderPool
是否无法通过属性文件进行设置?