Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从application.properties加载数据源_Java_Spring_Hibernate - Fatal编程技术网

Java 从application.properties加载数据源

Java 从application.properties加载数据源,java,spring,hibernate,Java,Spring,Hibernate,我正在学校项目中使用Spring+Hibernate 一切正常,我可以从数据库中获取数据,但我对数据库设置有疑问 是否可以替换配置文件的getDataSource方法?示例application.properties 如何在配置文件中实现它?是否有配置文件的指定位置 这是我的AppConfig.java package com.exstodigital.photofactory; import com.exstodigital.photofactory.dao.impl.UserDAOImpl

我正在学校项目中使用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()中所做的相同,但datasource是在服务器级别配置的

<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"/>
参考:

是的,可以完成

首先创建一个配置文件:在我的例子中为它命名为prop.properties,并以键值对的形式提供所有细节

然后创建属性对象和文件输入流

通过提供属性文件的位置来加载属性文件。我的文件在/opt文件夹中

现在通过提供密钥获取所有属性

您可以将文件保留在所需的位置。但一定要提供 程序中的相对路径


你在使用哪台服务器?@Zeus当我查看日志时,我看到Tomcat在8080上运行,所以我猜TomcatOP是从配置文件中提取的数据源。啊,整个数据源。。我的问题但是bean如何存储在属性文件中?这是一种方法,但是我应该使用配置文件来保持数据库连接吗?@NickDiv我想从配置文件中读取值,这个方法我不在乎,但我想用正确的方法!我不使用XML文件进行配置。@Yooouuri这是服务器级别的配置,服务器将负责维护您与数据库的连接。您所要做的就是使用我编写的java行从服务器获取它。。
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/MyLocalDB");
host=127.0.0.1
port=****
dbuser=****
dbpwd=****
dbname=****
public static Properties prop = new Properties();
    static InputStream input = null;
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");