我们有一个托管在共享 tomcat 实例上的 Spring 应用程序。
有时我们必须重新加载 spring 应用程序上下文但不想重新启动 Tomcat 服务器,因为其他应用程序也托管在那里。
是否通过以下方式刷新 springs 应用程序上下文
((ConfigurableApplicationContext)applicationContext).refresh();
Run Code Online (Sandbox Code Playgroud)
被认为是不好的做法?
我有哪些选择?
我的应用程序我有一个application-context.xml.现在我将ApplicationContext实例化为:
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
Run Code Online (Sandbox Code Playgroud)
是否可以通过此实例化传递参数,以便这些参数可用于初始化某些bean的某些属性?
PS:不使用属性文件.由于参数是生成运行时间,如可解决的jar的位置,系统架构,os名称等是可变的.
不确定这是否有答案,但这里有.我正在使用JUnit 4.8.1来测试我的Spring 3.1.0.RELEASE项目.我的classpath上有两个JAR文件.在每个文件中,都有相同名称的文件 - /module/rootContext.xml.
在我的testApplicationContext.xml文件(我的JUnit测试的Spring上下文文件)中,是否可以包含其中的每一个?现在,我唯一知道该怎么做的是
<import resource="classpath:/module/rootContext.xml" />
Run Code Online (Sandbox Code Playgroud)
但我不知道如何指定每个文件所在的确切JAR文件.
因为我正在处理不属于我自己的代码,所以不能更改JAR中XML文件的名称.
我正在为一个复杂的弹簧应用程序编写单元测试.我想加载spring上下文以使用定义的bean.我的context.xml位于:
src/main/resources/context.xml
Run Code Online (Sandbox Code Playgroud)
在maven构建之后,context.xml出现在:
target/classes/context.xml
Run Code Online (Sandbox Code Playgroud)
在pom.xml中,我有:(正如所建议的这个帖子)
<resources>
<resource>
<filtering>true</filtering>
<directory>src/test/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>**/*local.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
我试图通过两种方式完成这项工作:
1, Use ApplicationContext
AppliactionContext springContext = new ClassPathXmlApplicationContext("/context.xml");
MyObject myObject = springContext.getBean(myObject.class);
2, Use Annotations
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/context.xml"})
public class myTest{
@Autowired
MyObject myObject;
...
}
Run Code Online (Sandbox Code Playgroud)
但这两种方式都不适合我.错误信息:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) …Run Code Online (Sandbox Code Playgroud) 我试图根据这个官方的Apache CXF指南为我的基于CXF的客户端配置SSL支持,但Eclipse标记了带有红色下划线和非常短的错误描述的标记:http:conduit
The prefix "http" for element "http:conduit" is not bound
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了关于此消息的含义以及如何修复它的其他线索,但我还没有找到任何可以解释为什么我收到此错误的信息.
知道元素"http:conduit"的前缀"http"是不是绑定意味着什么?
绑定到什么?
为什么只有前缀"http"而不是"管道"?
我有一个奇怪的错误,我在互联网上搜索了很多.我无法理解为什么我收到此错误.我在春季jira上找到了关于这个错误的一些解释.我有context:component-scan,applicationContext.xml我在com.sow.webservices包中定义了5个包.但是,当我添加包含控制器类的控制器包时,我抛出
Error occured processing XML '[Ljava.lang.String; cannot be cast to java.lang.String'. See Error Log for more details
Run Code Online (Sandbox Code Playgroud)
这是组件扫描:
<context:component-scan base-package="com.sow.webservices.aop,
com.sow.webservices.exceptions,
com.sow.webservices.models,
com.sow.webservices.services,
com.sow.webservices.controller">
Run Code Online (Sandbox Code Playgroud)
我想向您展示整个异常跟踪.感谢您的帮助.
!ENTRY org.springframework.ide.eclipse.beans.core 1 0 2014-04-11 18:07:39.996
!MESSAGE Error occured processing '/SOW_WS/src/main/webapp/WEB-INF/applicationContext.xml'
!STACK 0
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
at org.springframework.context.annotation.AnnotationBeanNameGenerator.determineBeanNameFromAnnotation(AnnotationBeanNameGenerator.java:92)
at org.springframework.context.annotation.AnnotationBeanNameGenerator.generateBeanName(AnnotationBeanNameGenerator.java:70)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:247)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:85)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
at org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver$ElementTrackingNamespaceHandler.parse(DelegatingNamespaceHandlerResolver.java:177)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ErrorSuppressingBeanDefinitionParserDelegate.parseCustomElement(BeansConfig.java:1400)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:494)
at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.registerBeanDefinitions(BeansConfig.java:402)
at …Run Code Online (Sandbox Code Playgroud) 我有这个配置类:
@ComponentScan(
basePackages = {
"mypackage.controller",
"mypackage.service",
"mypackage.repository"
}
)
@TestPropertySource(locations="classpath:configuration.properties")
@Import({
H2Configuration.class
})
public class TestConfiguration {
}
@Configuration
public class H2Configuration {
@Bean
public DataSource dataSource() throws SQLException {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.addScript("h2/create.sql")
.addScript("h2/insert.sql")
.build();
db.getConnection().setAutoCommit(false);
return db;
}
}
Run Code Online (Sandbox Code Playgroud)
我有这两个班级测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = { TestConfiguration.class })
public class FirstRepositoryTest {
@Autowired
MyFirstRepositoryImpl repository;
@Before
public void initTest() {
}
@Test(expected = NullPointerException.class)
public void testNullRecords() {
repository.foo(null, null);
} …Run Code Online (Sandbox Code Playgroud) 我卸载了MyEclipse4S并重新安装它并从工作区运行项目并开始获得以下异常.我有
/WEB-INF/applicationContext.xml在正确的位置:(我的上下文文件位于底部.
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at …Run Code Online (Sandbox Code Playgroud) 基本上我有这个Outer.jar,在它中声明是一个带有组件扫描的应用程序上下文:
<context:component-scan
base-package="x.y.z.class" />
Run Code Online (Sandbox Code Playgroud)
然而,这x.y.z.class是在inner.jar中,它是outer.jar的依赖,
我收到一个错误,找不到类.../Outer.jar/x/y/z/class,怎么指定检查inner.jar?
更新:初始化应用程序上下文:
org.springframework.context.ApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
exception: I/O failure during classpath scanning; nested exception is java.io.FileNotFoundException: ..\default\deploy\test.war\WEB-INF\lib\inner.jar\x\y\z
and it says inner.jar/x/y/z/class not found
Run Code Online (Sandbox Code Playgroud)
Outer.jar将inner.jar作为依赖项
我是春天和maven的新手.我有一个使用Spring的简单hello world项目.项目构建成功但我在运行时遇到以下错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Run Code Online (Sandbox Code Playgroud)
这是主要的应用程序:App.java
package com.test.SpringMaven2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
System.out.println( "Hello World!" );
ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld hello = (HelloWorld) context.getBean("helloWorld");
hello.setName("Adnan");
hello.getName();
}
}
Run Code Online (Sandbox Code Playgroud)
这是HelloWorld bean
package com.test.SpringMaven2;
public class HelloWorld{
private String name;
public void …Run Code Online (Sandbox Code Playgroud) spring ×8
java ×6
junit ×2
maven ×2
spring-mvc ×2
autowired ×1
cxf ×1
jar ×1
refresh ×1
spring-aop ×1
ssl ×1
tomcat ×1
web-services ×1