我最近的目标是构建一个Spring Boot应用程序,但不需要任何XML配置文件(或尽可能少),因此我希望避免使用一些XML文件(即web.XML),特别是对于一些bean定义部分。
更难的部分来了。
我想使用@AutoWired注释将一个SessionFactory bean注入到类中,但每次尝试启动应用程序时,我都得到:
unsatisfiedDependencyException:创建名为“temperature controller”的bean时出错:通过字段“session factory”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.beanCreationException:创建名称为“session factory”的bean时出错:FactoryBean在创建对象时引发异常;嵌套异常为java.lang.IllegalStateException:EntityManagerFactory不能为空
好的,我理解Spring没有SessionFactory bean,因为它没有EntityManagerFactory。
因此,我将非常感谢任何关于如何解决这一问题的建议,但仅限于通过注解进行配置。
到目前为止,我读到了与我类似的关于在@Configuration class中指定一个bean的帖子:
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
然后将这一行添加到属性文件中:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.springsessioncontext
spring.jpa.show-sql=true spring.datasource.password=mysql spring.datasource.testwhileidle=true spring.jpa.hibernate.ddl-auto=update spring.datasource.validationquery=SELECT 1 spring.datasource.url=jdbc:mysql://localhost:3306/sys spring.jpa.properties.hibernate.dialect.mysql5dialect.spring.jpa.hibernate.naming-strategy=org.hibernate.dialties.cfg.improvednamingstrategy spring.datasource.ddl_context_class=org.springframework.orm.hibernate4.springsessioncontext
通常,当我想定义一些简单的东西时,我会创建一个类似于以下内容的类:
@Configuration
@EnableTransactionManagement
public class PersistanceJpaConfig {
@Bean
public LocalSessionFactoryBean hibernateSessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setPackagesToScan(new String[] {
"my.entities.package"
});
sessionFactory.setHibernateProperties(additionalProperties());
return sessionFactory;
}
@Bean HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory);
return transactionManager;
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306");
dataSource.setUsername("user");
dataSource.setPassword("password");
return dataSource;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57InnoDBDialect");
return properties;
}
}
通过使用@enabletransactionmanagement
并创建一个LocalSessionFactoryBean
类型的bean,spring将自动为您创建一个SessionFactory
bean,您可以在任何地方注入/自动连接。
当然,如果需要,您可以从属性文件中注入一些配置。
问题内容: 在最近我从事的一些大型项目中,选择其中一种(XML或注释)似乎变得越来越重要。随着项目的发展,一致性对于可维护性非常重要。 我的问题是:与基于注释的配置相比,基于XML的配置有哪些优势?与基于XML的配置相比,基于注释的配置有哪些优势? 问题答案: 注释有其用途,但它们不是杀死XML配置的灵丹妙药。我建议将两者混合! 例如,如果使用Spring,则将XML用于应用程序的依赖注入部分是完
我最近在使用作为Spring Boot applications(v2.2)开发的微服务,在我的公司,我们使用Keycloak作为授权服务器。我们之所以选择它,是因为我们需要复杂的策略、角色和组,我们还需要用户托管授权(UMA)来在用户之间共享资源。 有没有一种方法可以在控制器级别使用某种注释?类似于下面的伪代码:
从Spring 2.5开始,可以使用annotations配置依赖注入。 因此,不是使用XML来描述bean连接,而是可以通过在相关的类,方法或字段声明上使用注释将bean配置移动到组件类本身。 在注入XML之前执行注释注入。 因此,对于通过两种方法连接的属性,后一种配置将覆盖前者。 默认情况下,Spring容器中未打开注释接线。 因此,在我们使用基于注释的布线之前,我们需要在Spring配置文件
当我使用Spring framework时,我经常看到2个术语基于Java和基于注释的配置/自动生成。 如果它们不一样,你能告诉我它们之间有什么不同吗?
问题内容: 最近,在我们的团队中,我们开始讨论在代码中使用spring注释来定义spring依赖关系。当前,我们正在使用context.xml定义依赖项。您能给我一些关于这两种方法的线索吗?何时更好地使用? 编辑:我知道这似乎是对更一般的问题的重复问题,但是我对仅依赖注入的注解和配置的影响感兴趣,我相信与一般问题相比,注解和配置的影响会有所不同。 问题答案: 在阅读了此处的一些相关文章并在团队中进
我是Spring的新手,尝试将基于xml的配置转换为注释basic。我读了这个教程。它与基于xml的配置完美结合。MVCSpring积垢教程 现在我将所有基于xml的配置转换为注释,但我有一个问题。我几乎把我读到的东西都读了一遍,但我没有解决这个问题。 组织。springframework。豆。工厂BeanCreationException:创建名为“personController”的bean时