Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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类中使用@Bean配置数据源_Java_Hibernate_Spring Mvc_Datasource_Javabeans - Fatal编程技术网

如何在Java类中使用@Bean配置数据源

如何在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

我正在遵循Spring书籍中的一个示例来创建一个小型web应用商店

该示例使用hsqldb嵌入式数据库,但我不想使用它

我想连接到一个MySQL数据库,然后使用Hibernate sessionFractory

我以这种方式编辑了示例代码:

@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处理它?