gpt4 book ai didi

java - 在 Spring 应用程序中使用或测试时如何将参数传递给 Spring 存储库

转载 作者:行者123 更新时间:2023-12-02 02:02:17 26 4
gpt4 key购买 nike

我创建了一个 Spring 存储库,它允许该存储库的用户在 MySQL 表中添加和删除。现在为了能够使用此存储库,应用程序/测试人员需要传入数据源变量(即数据库的 URL、用户名和密码)。

我尝试为存储库的构造函数提供参数,但似乎这是不允许的。

根据我在网上阅读的内容,一种方法是使用 @Value 注释,并使用它来传递它。但是,如果 applciation.properties 与存储库不在同一文件中,这也有效吗?我的意思是,制作应用程序的人会将 application.properties 文件放在应用程序的目录中,对吗?并且不在存储库的目录中?在这种情况下我该怎么办?

感谢任何帮助,谢谢

这是我现在的存储库的代码:

@Repository
public class SigningKeyDao implements IDao<SigningKeyModel> {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
SigningKeyRowMapper wrapper = new SigningKeyRowMapper();

private String tableName = "signingKey";

public SigningKeyDao(String url, String username, String password) {
super();
this.dataSource =
DataSourceBuilder.create().url(url).username(username).password(password).build();
}

@PostConstruct
private void postConstruct() {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}

这就是我在测试类中使用此存储库的方式

@EnableJpaRepositories("com.supertokens.repository")
@SpringBootTest(classes = SigningKeyDao.class)
@EntityScan("com.supertokens.model")
public class SigningKeyTableTest {

SigningKeyDao dao;

public SigningKeyTableTest() {
this.dao =
new SigningKeyDao("jdbc:mysql://localhost:3306/st_maven", "root", <password>);
}
}

最佳答案

要在特定测试中将应用程序属性设置为特定值,请查看 @TestPropertySource 注释,它允许您在注释测试的范围内更改 application.properties 文件中的一个或多个属性的值-类。
示例:

@EnableJpaRepositories("com.supertokens.repository")
@SpringBootTest(classes = SigningKeyDao.class)
@EntityScan("com.supertokens.model")
@TestPropertySource(properties = {
"spring.datasource.url=custom_url_just_for_this_test",
"spring.datasource.username=user",
"spring.datasource.password=secret"
})
public class SigningKeyTableTest {

关于java - 在 Spring 应用程序中使用或测试时如何将参数传递给 Spring 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com