Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spring boot maven package war to tomcat mybatis/springbootstarter 1.1.1 start error #93

Closed
walkwolf opened this issue Sep 9, 2016 · 5 comments
Labels

Comments

@walkwolf
Copy link

walkwolf commented Sep 9, 2016

I create project with spring boot 1.4.0 and mybatis/spring-boot-starter 1.1.1.

The demo project in https://github.com/walkwolf/testboot
Any help thanks!

@Autowired problem

I find @Autowired SqlSessionFactory factory; then get mapper is no problem.
Use @Autowired Mapper is error.

@Autowired
SqlSessionFactory factory;
CityMapper mapper = factory.openSession().getMapper(CityMapper.class);

In other words, Mapper not exist in spring context.
I trace the problem ,then find MybatisAutoConfiguration

log.debug("Could not determine auto-configuration " + "package, automatic mapper scanning disabled.");

When package war file with maven pom,then copy tomcat webapp directory,start tomcat, I got error below

九月 09, 2016 12:16:06 下午 org.apache.catalina.startup.HostConfig deployWAR
信息: Deployment of web application archive D:\apache-tomcat-7.0.59\webapps\testboot.war has finished in 7,918 ms
九月 09, 2016 12:16:06 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-80"]
九月 09, 2016 12:16:06 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 12:16:06 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 8052 ms
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-80"]
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 1:31:32 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-apr-80"]
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["http-apr-80"]
九月 09, 2016 1:31:32 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version:        Apache Tomcat/7.0.59
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built:          Jan 28 2015 15:51:10 UTC
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number:         7.0.59.0
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name:               Windows 7
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version:            6.1
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture:          amd64
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home:             C:\Java\jre8
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version:           1.8.0_31-b13
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor:            Oracle Corporation
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE:         D:\apache-tomcat-7.0.59
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME:         D:\apache-tomcat-7.0.59
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.util.logging.config.file=D:\apache-tomcat-7.0.59\conf\logging.properties
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\apache-tomcat-7.0.59\endorsed
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\apache-tomcat-7.0.59
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\apache-tomcat-7.0.59
九月 09, 2016 1:31:57 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.io.tmpdir=D:\apache-tomcat-7.0.59\temp
九月 09, 2016 1:31:57 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: Loaded APR based Apache Tomcat Native library 1.1.32 using APR version 1.5.1.
九月 09, 2016 1:31:57 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
九月 09, 2016 1:31:58 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized (OpenSSL 1.0.1j 15 Oct 2014)
九月 09, 2016 1:31:58 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-apr-80"]
九月 09, 2016 1:31:58 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 1:31:58 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1544 ms
九月 09, 2016 1:31:58 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
九月 09, 2016 1:31:58 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.59
九月 09, 2016 1:31:58 下午 org.apache.catalina.startup.HostConfig deployWAR
信息: Deploying web application archive D:\apache-tomcat-7.0.59\webapps\testboot.war
九月 09, 2016 1:32:05 下午 org.apache.catalina.core.ContainerBase addChildInternal
严重: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testboot]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ABCController': Unsatisfied dependency expressed through field 'cityMapper': No qualifying bean of type [testboot.service.CityMapper] found for dependency [testboot.service.CityMapper]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [testboot.service.CityMapper] found for dependency [testboot.service.CityMapper]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
    at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:150)
    at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:130)
    at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5513)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [testboot.service.CityMapper] found for dependency [testboot.service.CityMapper]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
    ... 32 more

九月 09, 2016 1:32:05 下午 org.apache.catalina.startup.HostConfig deployWAR
严重: Error deploying web application archive D:\apache-tomcat-7.0.59\webapps\testboot.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testboot]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

九月 09, 2016 1:32:05 下午 org.apache.catalina.startup.HostConfig deployWAR
信息: Deployment of web application archive D:\apache-tomcat-7.0.59\webapps\testboot.war has finished in 6,607 ms
九月 09, 2016 1:32:05 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-80"]
九月 09, 2016 1:32:05 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
九月 09, 2016 1:32:05 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 6709 ms

@kazuki43zoo
Copy link
Member

kazuki43zoo commented Sep 9, 2016

@walkwolf

If you use auto configure for DataSource and DataSourceTransactionManager, please contain the spring-jdbc jar as classpath.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
</dependency>

Please try this.

Thanks.

@walkwolf
Copy link
Author

walkwolf commented Sep 9, 2016

@kazuki43zoo
I imported the spring-jdbc ,then tomcat work normal ,thanks a lot~.
Hope to include it in the mybatis/spring-boot-start document.
Strange is why IDE runs normally without spring-jdbc?

@kazuki43zoo
Copy link
Member

Strange is why IDE runs normally without spring-jdbc?

No. This behavior depends on a IDE or build plugin implementation.

For example )

  • Eclipse run normally
  • Spring Boot maven plugin (mvn spring-boot:run ) run normally
  • IDEA fail

Probably, Eclipse and Spring Boot maven plugin import the spring-jdbc jar via spring-boot-starter-jdbc.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <scope>provided</scope>
</dependency>

@kazuki43zoo
Copy link
Member

Hope to include it in the mybatis/spring-boot-start document.

Please contribute !!

@kazuki43zoo
Copy link
Member

After MDB generated file.Must modify the mapper java file add @Mapper annotations.If not ,Spring catn't autowire the Mapper through Main class.

You can scan Mapper interfaces that not annotate the @Mapper using @MapperScan as follow:

// ...
@MapperScan("testboot.service")
public class Main extends SpringBootServletInitializer {
    // ...
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants