繁体   English   中英

Spring-boot - 如何加载资源/数据源?

[英]Spring-boot - How to load resources/datasources?

我一直在使用Spring Boot并通过.jar文件部署应用程序。 我想加载多个数据源 当我使用本地tomcat时,我曾经将它们添加到context.xml ,但现在我正在使用嵌入式tomcat,并且想知道是否可以通过某些外部文件或某种方式将它们加载到服务器上(UAT) / PROD)。

我已经找到了一个如何通过Java Class进行操作的示例,但我想知道是否可以以其他方式执行此操作,因为我想将用户/密码保留在.jar和本地文件上的配置之外在服务器上。 (对于未来的发展看起来更容易/更快)。 也许使用“ datasource.yml ”或类似的东西..

有谁知道如何实现这一目标?

谢谢!

我的context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <!-- ABC QA -->
    <Resource
        name="jdbc/abc"
        type="javax.sql.DataSource"
        maxActive="5"
        maxIdle="2"
        username="xxx"
        maxWait="1000"
        validationQuery="select 1"         
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        password="xxx"     
        url="jdbc:sqlserver://server-qa.com:1234;databaseName=myDB"/>

    <!-- DEF QA -->
    <Resource
        name="jdbc/def"
        type="javax.sql.DataSource"
        maxActive="5"
        maxIdle="2"
        username="xxx"
        maxWait="1000"
        validationQuery="select 1"         
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        password="xxx"     
        url="jdbc:sqlserver://server2-qa.com:1234;databaseName=myDB"/>

</Context>

Ps。:如果有人想检查我引用的java,链接是: https//github.com/wilkinsona/spring-boot-sample-tomcat-jndi/blob/master/src/main/java/sample /tomcat/jndi/SampleTomcatJndiApplication.java

更新:

经过一些更改后,下面的代码现在适用于任何人需要它! :)

application.yml

server:
  port: 9998

logging.level.org.springframework.web: DEBUG

spring.ds_db1:
  url: jdbc:sqlserver://mydb1.com:1433;databaseName=mydb1
  username: xxx
  password: xxx
  driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

spring.ds_db2:
  url: jdbc:sqlserver://mydb2.com:1433;databaseName=mydb2
  username: xxx
  password: xxx
  driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

DatabaseConfig

@Configuration
@ConfigurationProperties(prefix = "spring.ds_db1")
public class DatabaseDb1Config {

    @Bean(name="dsDb1")
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getRequiredProperty("spring.ds_db1.driverClassName"));
        dataSource.setUrl(env.getRequiredProperty("spring.ds_db1.url"));
        dataSource.setUsername(env.getRequiredProperty("spring.ds_db1.username"));
        dataSource.setPassword(env.getRequiredProperty("spring.ds_db1.password"));

        return dataSource;
    }

    @Bean(name="jdbcDb1")
    public JdbcTemplate jdbcTemplate(DataSource dsChange) {
        return new JdbcTemplate(dsChange);
    }

}

Repository

@Service
public class ContractRepositoryImpl implements ContractRepository {

    @Autowired
    @Qualifier("jdbcDb1")
    protected JdbcTemplate jdbc;

    public Contract getContract(long id) {
        return jdbc.queryForObject("SELECT ...", contractMapper, id);
    }

    private static final RowMapper<Contract> contractMapper = new RowMapper<Contract>() {
        public Contract mapRow(ResultSet rs, int rowNum) throws SQLException {
            Contract contract = new Contract(rs.getLong("contract"), rs.getString("name"));
            return contract;
        }
    };

}

pom.xml相关部分

...
<spring.version>4.2.0.RELEASE</spring.version>
...

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- SQL SERVER DRIVER FOR LEGACY CONNECTIONS -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>2.0</version>
    </dependency>

您可以使用application.properties(或.yml)文件配置数据源。 请参阅可用属性列表。

Spring Boot将读取来自不同源的配置文件 ,一个是存储JAR文件的目录,或者您使用系统属性或环境变量提供值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM