You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.1.4服务测试无法找到数据库表问题

Spring Boot 3.1.4 集成测试异常:找不到test.role表

问题背景

我正在开发Spring Boot 3.1.4应用,相同代码在Spring Boot 3.0.5中可正常运行,但升级后Service层集成测试出现异常。

核心代码展示

主应用类

@SpringBootApplication
public class JobSearchApplication {

    public static void main(String[] args) {
        SpringApplication.run(JobSearchApplication.class, args);
    }
}

数据库配置类

package com.tomholmes.product.jobsearch.config;
@Configuration
@EnableAutoConfiguration
@ComponentScan("com.tomholmes.product.jobsearch")
@EntityScan("com.tomholmes.product.jobsearch.model")
@EnableJpaRepositories(basePackages = "com.tomholmes.product.jobsearch.repository")
@EnableTransactionManagement
public class DatabaseConfiguration {
}

Repository层测试(正常运行)

@AutoConfigureTestDatabase(replace=Replace.NONE)
@DataJpaTest
public class RoleRepositoryTest {
    @Autowired
    private RoleRepository repository;

    @Test
    public void testFindById() {
        long id = 1;
        RoleEntity roleEntity = repository.findById(id).orElse(null);
        assertNotNull(roleEntity);
        assertEquals(id, roleEntity.getId());
     }
}

Service层实现

@Transactional
@Service("roleService")
public class RoleServiceImpl implements RoleService {
    private RoleRepository roleRepository;

    public RoleServiceImpl(RoleRepository roleRepository) {
        this.roleRepository = roleRepository;
    }

    @Override
    public RoleEntity getById(long id) {
        RoleEntity role = roleRepository.findById(id).orElse(null);
        return role;
    }
}

异常的Service集成测试

@SpringBootTest(classes = JobSearchApplication.class)
@Transactional
public class RoleServiceTest {

    @Autowired
    private RoleService service;
    
    @Test
    public void testGetById() {
        long id = 1;
        RoleEntity entity = service.getById(id);
        assertNotNull(entity);
        assertEquals(id, entity.getId());
    }
}

报错信息

Caused by: java.sql.SQLSyntaxErrorException: Table 'test.role' doesn't exist
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:972) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-5.0.1.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-5.0.1.jar:na]
at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:239) ~[hibernate-core-6.2.9.Final.jar:6.2.9.Final]
... 156 common frames omitted

配置文件(更新)

# Spring Boot - Hibernate6 settings
spring.datasource.url=jdbc:mysql://localhost:3306/job_search_db?serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

问题说明

  • Repository测试可正常连接job_search_db库并查询role表
  • Service集成测试却试图访问test.role表,而非指定的job_search_db.role
  • 已尝试修改@SpringBootTest的classes参数为DatabaseConfiguration.class,无效
  • 使用最新MySQL驱动,希望用真实数据库测试业务逻辑

内容的提问来源于stack exchange,提问作者tjholmes66

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:40:22