SpringBoot在IDE可以正常运行,但是部署到Tomcat里就会启动失败 10C

我打算使用spring-boot + mybits plus构建一个RESTful服务器,在Eclipse里可以正常运行。但是一旦打包放到Tomcat里就会出现如下错误(NoSuchBeanDefinition),个人推测是某些配置文件没写完整或者有错误,导致的实例注入失败。
不过我检查了很多遍,尝试了很多办法,依然还是会有这个问题。
请各路大神帮帮忙!!

目录结构:
java-xxx.xxx.xxx.xxx.dao
|-xxx.xxx.xxx.xxx.entity(也就是javaBean类)
|-xxx.xxx.xxx.xxx.service(业务逻辑接口)
|-xxx.xxx.xxx.xxx.service.impl(业务逻辑实现类)
|-xxx.xxx.xxx.xxx.controller
resource-mapper . xxx . xxx.xml

pom.xml版本信息:

mybatisplus.spring.boot.version-1.0.5
mybatis-plus-2.3
spring-boot-starter-parent-2.3

application.yml信息:
mybatis-plus部分如下

mapper-locations: classpath:mapper/**/*.xml
typeAliasesPackage: com.latou.power.modules.*.entity

Java版本-1.8.0
Tomcat版本-8.5

Tomcat报错如下:

ConfigServletWebServerApplicationContext :
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'custUserController': Unsatisfied dependency expressed through field 'custUserService';

nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'custUserService': Unsatisfied dependency expressed through field 'baseMapper';

nested exception is org.springframework.beans.factory.NoSuchBeanDefinition Exception: No qualifying bean of type 'com.latou.power.modules.cus.dao.CustUserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

12个回答

会不会是@Service("custUserService") 这里把service注册了两次,直接@Service不行么

Lote921203
Latou_csdn 试了一下,直接@Service,好像确实不会影响在IDE里运行,不过还是会报一样的错误,看起来不是因为这个
接近 2 年之前 回复
Lote921203
Latou_csdn 试了一下,直接使用@Service,编译器内运行无异常,Tomcat内启动会报错Error creating bean with name 'custUserServiceImpl': Unsatisfied dependency expressed through field 'baseMapper';
接近 2 年之前 回复

我记得springboot项目不是自带容器的么,那你试一试打包成jar包或者war包 直接cmd命令启动试一下

Lote921203
Latou_csdn 尝试了打成jar包,用cmd命令运行了一下,还是报一样的错误
大约 2 年之前 回复

打成war包,把pom.xml packaging 改成war, 启动类继承SpringBootServletInitializer,

  @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(xxx.class);
        }
    public static void main(String[] args) {
        SpringApplication.run(xxx.class, args);
    }
Lote921203
Latou_csdn 我是像你说的这样写的,要不然在编译器里都启动不了了
大约 2 年之前 回复

或者是你向spring容器中注册了两次,正常情况下注解方式,和配置文件方式有一个生效就可以

Lote921203
Latou_csdn 配置文件里没有Service的注解,只有entity的注解。ServiceImpl的注解我是用的@Service("custUserService")
大约 2 年之前 回复
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-tomcat</artifactId>
 <scope>provided</scope>
</dependency>
 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
         <exclusions>  
                <exclusion>  
                    <groupId>org.springframework.boot</groupId>  
                    <artifactId>spring-boot-starter-tomcat</artifactId>  
                </exclusion>  
            </exclusions> 
    </dependency>

Lote921203
Latou_csdn 我把这个加进了pom.xml里,还是会报一样的错误,看起来不是因为这个
接近 2 年之前 回复

这个问题我已经解决了
最后居然是Spring版本的问题……
之前我用的是spring-boot-starter-parent-2.3
后来改成下面的这个版本(是我在http://mvnrepository.com 上找到的最新的一个版本)

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
</parent>

就能部署成功了,个人猜测,应该是mybatis-plus和spring版本的兼容的问题

New_ai10000
New_ai10000 暂时还没有解决
7 个月之前 回复

尝试了打成jar包,用cmd命令运行了一下,还是报错,错误信息如下:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'custUserService': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.latou.power.modules.cus.dao.CustUserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

尝试将项目文件部署到远程和本地服务器,都是报一样的错误

补充一下Controller、Service、ServiceImpl、DAO、Entity以及Mapper XML文件

实体类:

import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
 @TableName("表名")
public class CustUserEntity implements Serializable {
    //一些属性和对应的 get & set方法
}

DAO:

import org.apache.ibatis.annotations.Mapper;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.latou.power.modules.cus.entity.CustUserEntity;

@Mapper
public interface CustUserDao extends BaseMapper<CustUserEntity> {

}

Service:

 import com.baomidou.mybatisplus.service.IService;
import com.latou.power.modules.cus.entity.CustUserEntity;

public interface CustUserService extends IService<CustUserEntity> {
    // 接口方法
}

// Service 实现类

 import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.latou.power.modules.cus.dao.CustUserDao;
import com.latou.power.modules.cus.entity.CustUserEntity;
import com.latou.power.modules.cus.service.CustUserService;

@Service("custUserService")
public class CustUserServiceImpl extends ServiceImpl<CustUserDao, CustUserEntity> implements CustUserService {
    // 实现方法
}

Controller:

 @RestController
@RequestMapping("cus/custuser")
public class CustUserController {

    @Autowired
    private CustUserService custUserService;
}

Mapper XML:

 <mapper namespace="com.latou.power.modules.cus.dao.CustUserDao">
    <resultMap type="com.latou.power.modules.cus.entity.CustUserEntity" id="custUserMap">
        // 一些字段映射关系
    </resultMap>
</mapper>

CustUserService是不是这个bean没有注册到spring容器中

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问