java Spring在尝试创建数据源bean或JDBC模板时无法解析占位符
注意:当我删除datasource和jdbctemplate的bean时,错误就消失了。我确实在https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-data-access中尝试了这个解决方案 他们都没有工作。当我移除bean时,属性会自动连接到正确的字段中
这是申请表。特性:
app.datasource.url=jdbc:db2://stha7n0g7.iad.ca.inet:50001/icmnlsdb
app.datasource.username=<username>
app.datasource.password=<password>
app.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver
这里是DB2Config:
package com.intactfc.soa.document.docpostmonitoring.configuration;
import java.lang.reflect.InvocationTargetException;
import java.sql.Driver;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.ClassUtils;
import com.intactfc.soa.document.docpostmonitoring.model.DB2ConfigModel;
@Configuration
public class DB2Configuration {
@Value("${app.datasource.username}")
private String username;
@Value("${app.datasource.password}")
private String password;
@Value("${app.datasource.driverClassName}")
private String driverClass;
@Value("${app.datasource.url}")
private String dataSourceURL;
@Autowired
DB2ConfigModel model;
//@Autowired
//Environment env;
//
// @Bean
// public DataSource getDataSource2()
// {
// System.out.println(model.getUrl());
// return DataSourceBuilder.create().build();
// }
@Bean
@Primary
public JdbcTemplate jdbcTemplate() throws IllegalAccessException, InvocationTargetException, InstantiationException {
// extract this 4 parameters using your own logic
final String driverClassName = driverClass;
final String jdbcUrl = dataSourceURL;
final String usernameL = username;
final String passwordL = password;
System.out.println("test"+driverClassName+jdbcUrl+usernameL+passwordL);
// 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);
}
}
# 1 楼答案
AsSpring document
这意味着在带有
@Bean
、@Autowired
注释的方法中,您无法获得注入值。你只在创建bean之后才得到它们初始化bean时,可以使用
Environment
从application.properties
获取值