【发布时间】:2014-11-16 10:13:17
【问题描述】:
我有 3 个 Spring 项目:'web'、worker' 和 'core'。
'core' 包括来自 'web' 和 'worker' 的通用功能,例如域 bean 或 jpa 存储库,它作为 jar 包含在 'worker' 和 'web' 项目中。
“网络”项目中的 POM
<dependency>
<groupId>com.proyecti.magmainside221b</groupId>
<artifactId>core</artifactId>
<version>1.0.0.RC1</version>
</dependency>
当我在 Tomcat 中部署“web”项目时,“core”中的 Java 配置 bean 似乎没有被初始化,因为“datasource”bean(在“core”中定义) ' 在一个类中使用 @Bean 并使用 @Configuration 注释的项目)未发现注入到 'PersistentTokenBasedRememberMeServices'。
Caused by:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0': Cannot create inner bean '(inner bean)#1978517' of type [org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1978517': Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined
当我部署“web”项目时,我必须做什么才能从“core”项目初始化我的 java config beans?
谢谢!
编辑:
我在日志中发现我的 applicationContext 文件正在加载。
2014-09-22 15:04:37,922 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from file [/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/classes/META-INF/spring/applicationContext.xml]
2014-09-22 15:04:37,940 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/lib/core-1.0.0.RC1.jar!/META-INF/spring/applicationContext-core.xml]
在我的“核心”项目中,我(认为)不需要 applicationContext,因为我使用的是 Java 配置,而我的主要配置类如下所示:
@Configuration
@EnableSpringConfigured
@EnableTransactionManagement
@EnableJpaRepositories("com.proyecti.magma.common.datasources.internal.repositories")
@ComponentScan( basePackages = {"com.proyecti.magma"},
excludeFilters=
{
@ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class)
})
@Order(1)
public class BasicDataSourceConfig
{
...
}
我在 BasicDataSourceConfig 构造函数中设置了一个断点,但没有到达。
当我统一这些项目时,一切正常。
更新 2:
这是我的项目结构的样子:
【问题讨论】:
-
你能显示
web和core模块的Spring配置吗? -
编辑了更多信息:)
-
web 项目中的组件扫描是什么样子的?
BasicDataSourceConfig在什么包中? -
如果添加了包含信息的屏幕截图,但在调试模式下未到达
BasicDataSourceConfig构造函数 -
你能发布'web'上下文配置吗?