2025-04-24T16:15:04.338+08:00 ERROR 3736 --- [ restartedMain] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'userDetailsService': Error creating bean with name 'userDetailsServiceImpl': Unsatisfied dependency expressed through field 'iUserService': Error creating bean with name 'IUserServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': Error creating bean with name 'userMapper' defined in file [D:\dm\Ssss\back\target\classes\cn\zwz\data\dao\mapper\UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: Unsatisfied dependency expressed through method 'dataSource' parameter 0: Error creating bean with name 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties': Could not bind properties to 'DataSourceProperties' : prefix=spring.datasource, ignoreInvalidFields=false, ignoreUnknownFields=true
时间: 2025-06-08 07:03:27 浏览: 39
### Spring Boot Tomcat 启动失败原因分析
#### 1. **UnsatisfiedDependencyException 原因**
`UnsatisfiedDependencyException` 表明某些 Bean 的依赖未被正确解析。这通常是由于数据源配置错误或 Mapper 扫描不匹配引起的。以下是可能导致此问题的原因及其解决方案:
- **数据源未正确定位**
如果 `@Primary` 或者 `@Qualifier` 注解缺失,Spring 可能无法区分主数据源和其他数据源[^2]。确保通过 `@Primary` 显式声明主数据源。
- **Mapper 接口扫描范围不对**
使用 `@MapperScan` 时需指定正确的包路径以及关联的 `sqlSessionFactoryRef` 属性。如果这些设置有误,则会导致 `userMapper` 初始化失败[^3]。
- **SQL Session Factory 配置异常**
当前项目的 `SqlSessionFactory` 方法可能未能成功绑定到对应的数据源实例。例如,在多数据源场景下,应为每个数据源单独定义并注册相应的 `SqlSessionFactory` 和事务管理器。
#### 2. **Tomcat 数据源配置检查**
- **单数据源配置验证**
单数据源情况下,确认以下核心参数已正确配置:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.tomcat.max-active=30
spring.datasource.tomcat.max-idle=10
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.initial-size=5
```
上述配置中的连接池属性(如 `max-active`, `min-idle` 等)有助于优化数据库链接性能[^1]。
- **多数据源 JNDI 支持**
若项目运行于外部 Tomcat 并启用 JNDI 数据源,则需要调整如下内容:
- 在 `application.properties` 中添加:
```properties
spring.datasource.jndi-name=java:/comp/env/jdbc/TestDB
```
- 对外暴露的 Tomcat server.xml 文件中增加 Resource 节点:
```xml
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="password"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/testdb"/>
```
- Web 应用的 `web.xml` 添加资源引用:
```xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
```
这些步骤能够使 Spring Boot 正确加载来自外部容器的数据源信息[^4]。
#### 3. **代码层面排查建议**
- **数据源 Bean 定义完整性**
下面是一个完整的多数据源配置案例:
```java
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
}
```
- **Mapper 接口映射一致性**
确认 `UserMapper` 已经标注了 `@Mapper` 注解或者已被自动扫描到相应包内。例如:
```java
@Mapper
public interface UserMapper {
List<User> findAllUsers();
}
```
#### 4. **日志调试辅助诊断**
开启 SQL 日志记录可以帮助定位潜在问题:
```properties
logging.level.org.springframework.jdbc.core=DEBUG
logging.level.com.example.mapper=DEBUG
```
以上配置可打印出实际执行的 SQL 查询语句及参数传递情况[^1]。
---
###
阅读全文
相关推荐




















