[英]How do I manually configure a JdbcTemplate in Spring Boot?
這是我的基本DAO實現類:
@Repository
public class MeetingDaoImpl implements MeetingDao {
@Autowired
JdbcTemplate jdbcTemplate;
public boolean insertNewMeeting(String initials, String meetingId, int numYears) {
int numRowsAffected = jdbcTemplate.update(SQLConstants.INSERT_NEW_MEETING,
new Object[] {initials.toLowerCase(), meetingId, numYears});
return numRowsAffected > 0;
}
}
jdbcTemplate
自動從我的application.properties
文件中讀取spring.datasource
屬性,這很棒,但是它包含我不想提交的數據庫密碼。 相反,我想從本地server.properties
文件讀取它,而我可以很容易地從Java類讀取它。
有沒有辦法用Java配置jdbcTemplate
? 我已經看到了多個使用bean和XML的示例,但沒有使用Java的示例。
只需聲明一個JdbcTemplate
bean:
@Bean
JdbcTemplate jdbcTemplate() throws IllegalAccessException, InvocationTargetException, InstantiationException {
// extract this 4 parameters using your own logic
final String driverClassName = "org.h2.Driver";
final String jdbcUrl = "jdbc:h2:mem:test";
final String username = "sa";
final String password = "";
// Build dataSource manually:
final Class<?> driverClass = ClassUtils.resolveClassName(driverClassName, this.getClass().getClassLoader());
final Driver driver = (Driver) ClassUtils.getConstructorIfAvailable(driverClass).newInstance();
final DataSource dataSource = new SimpleDriverDataSource(driver, jdbcUrl, username, password);
// or using DataSourceBuilder:
final DataSource dataSource = DataSourceBuilder.create().driverClassName(driverClassName).url(jdbcUrl).username(username).password(password).build();
// and make the jdbcTemplate
return new JdbcTemplate(dataSource);
}
另一種方法不是在application.properties
文件中設置數據源參數,而是在運行時聲明它。 在運行應用程序時,您可以覆蓋application.properties
定義的任何屬性或定義一個新屬性。
例如:
java -jar my-spring-boot-app.jar --spring.datasource.url=jdbc:h2:mem:test --spring.datasource.username=sa --spring.datasource.password=secret
更復雜的方法是使用spring-cloud-config-server或Consul來管理您的設置。
您可以提供以下屬性:
datasource.local.url= datasource.local.driver-class-name= datasource.local.username= datasource.local.password=
創建一個配置類:
@Configuration
@ConfigurationProperties("datasource.local")
@EnableJpaRepositories(
basePackages = "com...",
transactionManagerRef = "localTransactionManager",
entityManagerFactoryRef = "localEntityManagerFactory"
)
public class OracleConfiguration {
@NotNull
private String username;
@NotNull
private String password;
@NotNull
private String url;
private String driverClassName;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUrl(String url) {
this.url = url;
}
@Bean
DataSource localDataSource() throws SQLException {
return DataSourceBuilder
.create()
.url(this.url)
.username(this.username)
.password(this.password)
.driverClassName(this.driverClassName)
.build();
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
@Bean
@Autowired
public PlatformTransactionManager localTransactionManager(@Qualifier("localEntityManagerFactory")
EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean
@Autowired
public LocalContainerEntityManagerFactoryBean localEntityManagerFactory(@Qualifier("localDataSource")DataSource dataSource) {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
factoryBean.setPackagesToScan("com...");
return factoryBean;
}
@Bean
@Autowired
public JdbcTemplate localJdbcTemplate(@Qualifier("localDataSource")DataSource dataSource) {
return new JdbcTemplate(dataSource);
}}
在您的主應用程序類中,包含以下配置文件:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
@EnableTransactionManagement
@Import({ OracleConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}}
然后在您的班級中需要注入模板:
@Autowired
private JdbcTemplate localJdbcTemplate;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.