如何在Java类中使用@Bean配置数据源
我正在遵循Spring书籍中的一个示例来创建一个小型web应用商店 该示例使用hsqldb嵌入式数据库,但我不想使用它 我想连接到一个MySQL数据库,然后使用Hibernate sessionFractory 我以这种方式编辑了示例代码:如何在Java类中使用@Bean配置数据源,java,hibernate,spring-mvc,datasource,javabeans,Java,Hibernate,Spring Mvc,Datasource,Javabeans,我正在遵循Spring书籍中的一个示例来创建一个小型web应用商店 该示例使用hsqldb嵌入式数据库,但我不想使用它 我想连接到一个MySQL数据库,然后使用Hibernate sessionFractory 我以这种方式编辑了示例代码: @Configuration @ComponentScan("com.packagename.webstore") public class RootApplicationContextConfig { @Bean public Data
@Configuration
@ComponentScan("com.packagename.webstore")
public class RootApplicationContextConfig {
@Bean
public DataSource dataSource() {
// this is the original code of the example
/*EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.HSQL)
.addScript("db/sql/create-table.sql")
.addScript("db/sql/insert-data.sql")
.build();
return db; */
//this is my code
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/dbName");
dataSource.setUsername( "user" );
dataSource.setPassword( "pass" );
return dataSource;
}
}
@Autowired
private DataSource datasource;
...
Connection connection = datasource.getConnection();
...
然后,在我的类中,我通过以下方式访问数据源:
@Configuration
@ComponentScan("com.packagename.webstore")
public class RootApplicationContextConfig {
@Bean
public DataSource dataSource() {
// this is the original code of the example
/*EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.HSQL)
.addScript("db/sql/create-table.sql")
.addScript("db/sql/insert-data.sql")
.build();
return db; */
//this is my code
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/dbName");
dataSource.setUsername( "user" );
dataSource.setPassword( "pass" );
return dataSource;
}
}
@Autowired
private DataSource datasource;
...
Connection connection = datasource.getConnection();
...
我做的对吗
如果以后我想使用Hibernate sessionFactory,我应该如何编辑代码
谢谢大家如果您想用spring配置SessionFactory,然后创建所需的bean,如下所示
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.spring.persistence" })
public class PersistenceConfig {
@Autowired
private Environment env;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(restDataSource());
sessionFactory.setPackagesToScan(
new String[] { "entity class package name so it can scan them" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager txManager
= new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties hibernateProperties() {
return new Properties() {
{
setProperty("hibernate.hbm2ddl.auto",
env.getProperty("hibernate.hbm2ddl.auto"));
setProperty("hibernate.dialect",
env.getProperty("hibernate.dialect"));
setProperty("hibernate.globally_quoted_identifiers",
"true");
}
};
}
}
属性文件
# jdbc confi
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql
# hibernate config
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop
然后,您可以在所需的类中创建数据源和数据源或SessionFactory
public class HibernateDAO{
@Autowired
SessionFactory sessionFactory;
@Autowired
DataSource datasource;
}
下面是一个示例这有帮助吗?如果有任何特殊原因不将这些值放在您的
应用程序.properties中
并让Boot处理它?