我正在
通过构造函数参数0表示的不满意的依赖性;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为' clientSpringDataRepository'的init时出错:init方法的调用失败;嵌套异常是java.lang.IllegalArgumentException:不是托管类型:class com.foo.model.Client
这里最重要的是clientSpringDataRepository存储库在这里不会将@Entity客户端识别为托管类型。
我的项目是多模块的,所以:
\pom.xml
|
\model
pom.xml
/*com.foo.model.Client @Entity definition*/
\repository
pom.xml
/*com.foo.dao.ClientSpringDataRepository extends JpaRepository<Client, Long>" definition*/
...
当我将应用程序构建到WAR时,代码工作正常。当我通过主方法通过IntelliJ运行它时,它也有效。但是当我将构建更改为JAR并使java -jar在启动时失败时。
我的配置是:
a)模型
@Configuration
@EntityScan
@ImportResource({"classpath:model-context-core.xml",
"classpath:model-context-persistence.xml"})
public class ModelConfig {}
b)存储库
@Configuration
@Import(ModelConfig.class)
@ComponentScan(
basePackages = "com.foo.dao",
excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = JpaRepository.class)
)
@EnableJpaRepositories(basePackages = "com.foo.dao")
public class RepositoriesConfig {}
c)服务
@Configuration
@Import(RepositoriesConfig.class)
@ImportResource({"classpath:services-context.xml", "classpath:services-context-mail.xml"})
@ComponentScan(basePackages = {"com.foo.services", "com.foo.utils", "com.foo.context"})
public class ServicesConfig {}
d)休息
@Configuration
@Import(ServicesConfig.class)
@ImportResource("classpath:admin-rest-context.xml")
public class FooRestConfig extends WebMvcConfigurerAdapter {
@Autowired
private LocaleRequestFilter localeRequestFilter;
// ------------- IncomingRequestFilter + Registration -------------
@Bean
Filter incomingRequestFilter(IVisibilityService visibilityService) {
return new IncomingRequestFilter(visibilityService);
}
e)主要
@SpringBootApplication
public class FooWebApp {
public static void main(String[] args) {
SpringApplication.run(FooWebApp.class, args);
}
}
我的entityManagerFactory是:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="com.foo.model"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="${hibernate.dialect}"/>
<entry key="hibernate.show_sql" value="${hibernate.show_sql}"/>
<entry key="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}"/>
<entry key="hibernate.format_sql" value="${hibernate.format_sql}"/>
<entry key="hibernate.generate_statistics" value="${hibernate.generate_statistics}"/>
<entry key="hibernate.use_sql_comments" value="${hibernate.use_sql_comments}"/>
<entry key="hibernate.default_batch_fetch_size" value="${hibernate.default_batch_fetch_size}"/>
<entry key="hibernate.cache.provider_class" value="${hibernate.cache.provider_class}"/>
<entry key="hibernate.cache.use_second_level_cache" value="${hibernate.cache.use_second_level_cache}"/>
<entry key="hibernate.cache.use_query_cache" value="${hibernate.use_query_cache}"/>
</map>
</property>
<property name="persistenceUnitName" value="${jpa.persistenceUnitName}"/>
</bean>
我不确定它是否足够信息。我试图做出最小的例子,但它对我有用。在这里,我需要将现有应用程序重写为Spring-Boot,因此尝试提取最重要的信息。
当尝试创建包含对Spring-Data bean的引用的IVisibilityService bean时,它在d)中失败。
问题是我错过了什么?
答案 0 :(得分:3)
在SpringBoot Main类上添加org.springframework.boot.autoconfigure.domain.EntityScan ...
@SpringBootApplication
@EntityScan("com.foo.model")
public class FooWebApp {
//这样它就会扫描你的实体包,并由Spring管理
答案 1 :(得分:0)
问题出在persistence.xml文件中(之前在项目中使用过)。 Spring正在寻找并覆盖spring boot实体。
删除了persistence.xml帮助。
有趣的是它使用的是WAR格式而不是JAR。但无论如何现在都有效。