Java 从application.properties加载数据源
我正在学校项目中使用Spring+Hibernate 一切正常,我可以从数据库中获取数据,但我对数据库设置有疑问 是否可以替换配置文件的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
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");