JdbcTemplate的手动初始化

问题描述 投票:0回答:1

我计划手动初始化我的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,但这不是我要寻找的方法。

spring spring-boot spring-jdbc jdbctemplate
1个回答
0
投票

下面的示例代码尝试根据命令参数加载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.");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.