簡體   English   中英

從application.properties加載dataSource

[英]load dataSource from application.properties

我正在使用Spring + Hibernate進行學校項目。

一切正常,我能夠從數據庫中獲取數據,但是我對數據庫設置有疑問。

是否可以將getDataSource方法替換為配置文件? 示例application.properties。

如何在我的配置文件中實現它? 並有配置文件的指定位置嗎?

這是我的AppConfig.java

package com.exstodigital.photofactory;

import com.exstodigital.photofactory.dao.impl.UserDAOImpl;
import org.apache.commons.dbcp2.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
public class AppConfig {
    @Autowired
    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(DataSource dataSource) {
        LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);

        // Models
        sessionBuilder.scanPackages("com.exstodigital.photofactory.model");

        return sessionBuilder.buildSessionFactory();
    }

    @Bean(name = "dataSource")
    public DataSource getDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("********");
        dataSource.setUsername("********");
        dataSource.setPassword("********");

        return dataSource;
    }

    @Autowired
    @Bean(name = "transactionManager")
    public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
        return new HibernateTransactionManager(sessionFactory);
    }
}

當然可以

嘗試類似

@Value("${spring.datasource.url}")
    private String jdbcURl;

@Value("${spring.datasource.username}")
    private String dbUsername;

@Value("${spring.datasource.password}")
    private String dbPassword;

@Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "your package" });
        return sessionFactory;
    }

@Bean(name = "dataSource")
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl(jdbcURl);
        dataSource.setUsername(dbUsername);
        dataSource.setPassword(dbPassword);
        return dataSource

}

因此,您的application.properties將具有以下屬性:

spring.datasource.url = {whatever you want to put}
spring.datasource.username = {Your username}
spring.datasource.password = {Your password}

更新server.xml以包含以下幾行,就像在getDataSource()中所做的一樣,但是數據源是在服務器級別配置的。

<Resource name="jdbc/MyDB" 
      global="jdbc/MyDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/UserDB" 
      username="pankaj" 
      password="pankaj123"        
      maxActive="100" 
      maxIdle="20" 
      minIdle="5" 
      maxWait="10000"/>

在您的getDataSource中,只需使用以下代碼行提取此數據源並返回它。

DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/MyLocalDB");

參考: http : //www.journaldev.com/2513/tomcat-datasource-jndi-example-java

是的,它可以做到。

首先創建一個配置文件:在我的情況下為它命名為prop.properties,並在鍵值對中提供所有詳細信息

host=127.0.0.1
port=****
dbuser=****
dbpwd=****
dbname=****

然后創建一個屬性對象和文件輸入流

public static Properties prop = new Properties();
    static InputStream input = null;

通過提供其位置來加載屬性文件。 我的文件在/ opt文件夾中

static{
            try {                 
                input = new FileInputStream("/opt/prop.properties");
                prop.load(input);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

現在通過提供密鑰來獲取所有屬性

prop.getProperty("host");
prop.getProperty("port");
prop.getProperty("dbuser");
prop.getProperty("dbpwd");
prop.getProperty("dbname");

您可以將文件保存在所需的位置。 但一定要在程序中提供相對路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM