在黄瓜测试模块中使用主应用程序数据源-Spring-boot应用程序

问题描述

我试图在Spring-boot应用程序的黄瓜测试模块中将数据插入数据库。

使用测试配置文件(mvn spring-boot:run -Dspring-boot.run.profiles=test)启动spring应用程序时,它会启动应用程序并正常运行。问题是在黄瓜测试执行期间,当尝试设置datasource(如下面的代码中的**行所示)时,它为null。那我应该重新设置数据源吗?如果可以的话。

这不是黄瓜测试相关的问题,而是我无法访问在主应用程序中设置的数据源。

下面是代码

    @ContextConfiguration(classes = MainApp.class,loader = SpringBootContextLoader.class)
    @ActiveProfiles("test")
    @Configuration
    @PropertySource({"classpath:create-sql.xml"})
    public class TestHelper {
    
        @Value("${CreateSql}")
        private String CreateSql;

        @Autowired
        private SqlQueryBuilder sqlQueryBuilder;
    
        @Autowired
        private NamedParameterJdbcTemplate jdbcTemplate;
    
        @Autowired
        private UserPreferenceFormatter formatter;
    
        @Autowired
        private DataSource dataSource;
    
    public static void getDataList() throws IOException {

            MapSqlParameterSource sqlParamSource = new MapSqlParameterSource();
            sqlQueryBuilder = new SqlQueryBuilder();
    
            jdbcTemplate = new NamedParameterJdbcTemplate(dataSource); ****
    
            String parsedSql = sqlQueryBuilder.parseSql(CreateSql,null,null);
            List<DataSummary> dataSummaries = jdbcTemplate.query(parsedSql,sqlParamSource,new DataSummaryRowMapper(null,formatter));
        }

application-test.yml文件位于资源文件夹下,其中所有spring数据源都位于测试模块中

app-db-url: jdbc:oracle:....
app-db-user: USERNAME
spring:
  datasource:
    password: PWD

我也经历了以下解决方案

Solution-1

Solution-2

部署模块app-config.yml

....
data:
    # Database
    app-db-url : @@app-db-url@@
    app-db-user: @@app-db-user@@
......

解决方法

您似乎缺少定义该DataSource bean的代码。 你应该有这样的东西:

@Configuration
public class DataSourceConfig {
    
    @Bean
    public DataSource getDataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.h2.Driver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        dataSourceBuilder.username("SA");
        dataSourceBuilder.password("");
        return dataSourceBuilder.build();
    }
}

或类似的东西:

@Bean 
public DataSource getDataSource() { 
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); 
    dataSourceBuilder.username("SA"); 
    dataSourceBuilder.password(""); 
    return dataSourceBuilder.build(); 
}

其余的财产所有者可以进入属性文件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...