我计划手动初始化我的JdbcTemplate
,而不是自动装配它,并在application.properties文件中设置url,用户名和密码。但是该应用程序无法启动,因为我认为它期望从application.properties文件中找到一个url,用户名和密码。
这是我想要实现的摘要。
public static JdbcTemplate getTemplate(String environment) {
return environment.equals("dev")
? new JdbcTemplate(new DriverManagerDataSource(URL1, USERNAME, PASSWORD))
: new JdbcTemplate(new DriverManagerDataSource(URL2, USERNAME, PASSWORD));
}
是否有一种方法可以在application.properties文件中没有url,用户名和密码的情况下实现此目的?
注意:我知道Profiles
,但这不是我要寻找的方法。
下面的示例代码尝试根据命令参数加载MySQL或Oracle的数据源。然后,它将DataSource对象传递给JdbcTemplate。创建数据源不需要读取application.properties。
import com.mysql.cj.jdbc.MysqlDataSource;
import oracle.jdbc.pool.OracleDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import java.sql.ResultSet;
import java.sql.SQLException;
enum Db {
MYSQL, ORACLE
}
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("Start ....");
JdbcTemplate jdbcTemplate = getTemplate(Db.valueOf(args[0]));
RowCallbackHandler handler = new RowCallbackHandler() {
public void processRow(ResultSet resultSet) throws SQLException {
do {
System.out.println(resultSet.getString("DESCR"));
}
while (resultSet.next());
}
};
jdbcTemplate.query("select * from TableA", handler);
}
public static JdbcTemplate getTemplate(Db db) throws Exception {
if (Db.MYSQL.equals(db)) {
MysqlDataSource ds = new MysqlDataSource();
ds.setURL("MYSQL_DB_URL");
ds.setUser("MYSQL_DB_USERNAME");
ds.setPassword("MYSQL_DB_PASSWORD");
return new JdbcTemplate(ds);
} else if (Db.ORACLE.equals(db)) {
OracleDataSource ds = new OracleDataSource();
ds.setURL("ORACLE_DB_URL");
ds.setUser("ORACLE_DB_USERNAME");
ds.setPassword("ORACLE_DB_PASSWORD");
return new JdbcTemplate(ds);
}
throw new IllegalArgumentException("Invalid DB type.");
}
}