试图将我的机器上本地运行的spring / hibernate项目连接到我的aws rds。我正在尝试修改我以前的设置,这是一个h2本地数据库数据源。不确定如何结合使用xml和java配置将bean导入java配置?
我的dataconfig.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context"
xmlns:jdbc="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cloud/aws/context
http://www.springframework.org/schema/cloud/aws/context/spring-cloud-aws-context.xsd">
<aws-context:context-region region="eu-west-1a"/>
<aws-context:context-credentials>
<aws-context:simple-credentials access-key="
my key" secret-key="my key" />
</aws-context:context-credentials>
<jdbc:data-source
db-instance-identifier="mydb"
password="my password">
</jdbc:data-source>
data config.Java
@Configuration
@PropertySource("app.properties")
@EnableJpaRepositories(basePackages = "haughton.icecreamapi.dao")
public class DataConfig {
@Autowired
private Environment env;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
factory.setDataSource(dataSource());
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan(env.getProperty("entity.package"));
factory.setJpaProperties(getHibernateProperties());
return factory;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
properties.put("hibernate.implicit_naming_strategy",env.getProperty("hibernate.implicit_naming_strategy"));
properties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
//removed to keep db consistent
properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
return properties;
}
@Bean
public DataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
// Driver class name
ds.setDriverClassName(env.getProperty("db.driver"));
// Set URL
ds.setUrl(env.getProperty("db.url"));
// Set username & password
ds.setUsername(env.getProperty("db.username"));
ds.setPassword(env.getProperty("db.password"));
return ds;
}
}
Spring Cloud doc Section 3.1.2告诉您如何将XML配置移动到注释中。它说要在Application Configuration对象中添加一些注释。 (如果还没有,请创建一个新的。)
@Configuration
@EnableContextInstanceData
public static class ApplicationConfiguration {
}
您有一些指定键的选项:
aws configure
并在那里设置密钥和区域。如果您选择此路线,请记住在生产过程中将其作为系统设置的一部分。我建议使用第3个项目符号点选项。
您也可以连接application.properties文件中的值,但我不知道该怎么做。
@Configuration类PersistenceContext {
@Bean(destroyMethod = "close")
DataSource dataSource(Environment env) {
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(env.getRequiredProperty("db.driver"));
dataSourceConfig.setJdbcUrl(env.getRequiredProperty("db.url"));
dataSourceConfig.setUsername(env.getRequiredProperty("db.username"));
dataSourceConfig.setPassword(env.getRequiredProperty("db.password"));
return new HikariDataSource(dataSourceConfig);
}
//Add the other beans here
}
此示例使用Hikari连接池框架。如果你想使用它,你将不得不添加适当的依赖项。
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
这需要Java 7;还有其他兼容版本可用于Java 6-9。当然,如果您愿意,可以使用不同的连接池。