import org.apache.catalina.Context;
import org.apache.catalina.deploy.ContextResource;
import org.apache.catalina.startup.Tomcat;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@EnableAutoConfiguration
@ComponentScan
@ImportResource("classpath:applicationContext.xml")
public class Application {
public static void main(String[] args) throws Exception {
new SpringApplicationBuilder()
.showBanner(false)
.sources(Application.class)
.run(args);
}
如果删除@ImportResource,我的应用程序将启动。我可以连接到tomcat实例。我可以检查所有执行器端点。使用JConsole,我可以连接到应用程序,并且可以在MBean中看到我的数据源(Catalina->资源->上下文->“ /”-> localhost-> javax.sql.DataSource-> jdbc / mydatasource)
我还通过JConsole在此处显示了MBean(Tomcat-> DataSource-> /-> localhost-> javax.sql.DataSource-> jdbc / mydatasource)
但是,当我@ImportResource时,实际上是通过JNDI查找mydatasource的,但找不到它。
<bean id="myDS" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/mydatasource"/>
</bean>
我导入的xml文件的相关部分
我上面配置的ContextResource具有与在将应用程序部署到tomcat容器中时要部署的context.xml中使用的参数完全相同的参数。导入到tomcat容器后,导入的Bean和应用程序可以正常工作。
因此看来我现在有一个上下文,但似乎命名不正确。我尝试了资源名称的各种组合,但似乎无法在这种情况下生成“ comp”绑定。
不负相思意
慕容708150