我正在开发一个包含子模块的spring应用程序,大致如下所示:
project
|-- module1
| |-- src
| | `-- main
| | |-- java
| | `-- resources
| | |-- applicationContext.xml
| | `-- web.xml
| `-- pom.xml
|-- module2
| |-- src
| | `-- main
| | |-- java
| | `-- resources
| | `-- batch-jobs.xml
| `-- pom.xml
`-- pom.xml
module1 包含网络应用配置。
module2 包含使用spring-batch
运行批处理作业,这些作业在batch-jobs.xml
中配置。
在applicationContext.xml
内,我有以下一行:
<import resource="classpath*: batch-jobs.xml" />
据我所知,这个文件正在加载。我假设这是因为之前我使用的是classpath: batch-jobs.xml
(没有*
),但找不到该文件。
尽管加载了这个文件,我得到了NoSuchBeanDefinitionException
。如果我将所有内容从batch-jobs.xml
复制到applicationContext.xml
,则可以正常使用。
答案 0 :(得分:3)
当你使用像这样的星号时
<import resource="classpath*: batch-jobs.xml" />
它会忽略它找不到的文件(除其他外)
参见例如this question了解详情
确保使用前导斜杠引用其弹簧配置xml,如下所示:
<import resource="classpath:/batch-jobs.xml" />
如果仍然抱怨文件batch-jobs.xml未找到,请确保您的类路径上有模块2 jar(将module2的依赖性添加到模块1)。
答案 1 :(得分:0)
您可以使用maven复制资源插件将资源复制到module1项目(在module1 pom.xml中添加复制资源插件)。假设你修改了import语句<import resource="classpath*: springjobs/batch-jobs.xml" />
你可以使用copy resource plugin将x2文件从module2的资源目录复制到module1。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy--common-resources</id>
<phase>initialize</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/src/main/resources/spingjobs</outputDirectory>
<resources>
<resource>
<directory>${basedir}/../project/module2/src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
答案 2 :(得分:0)
当您有多个模块且基本Web模块不知道插件(审计,日志记录)等捆绑模块时,您可以使用以下方法。
classpath*:applicationContext-*.xml
您必须遵循spring配置XML文件(applicationContext-m1.xml,applicationContext-m2.xml)的命名约定,才能使用spring的类路径扫描加载配置。
答案 3 :(得分:0)
这也可以使用maven配置来实现。我不知道你是否正在实现Maven。但是你可以按照下面的说法来实现这个目标......
Module A,
xml file of A is a.xml
Module B.
xml file of B is b.xml
I have to include the config file of Module B in Module A.
Step 1:
In Module A pom.xml file include the dependency of Module B.
<dependency>
<groupId><module_package></groupId>
<artifactId><module_name></artifactId>
<version>1.0</version>
</dependency>
Step 2:
Go to the xml configuration file(eg a.xml) and import the configuration file of Module B.
<import resource="b.xml"/>