我设置了多个服务器运行的服务器@Schedule,它运行弹出批处理作业,向用户发送电子邮件.我想确保在多个服务器上只运行此作业的一个实例.
基于这个问题,我已经实现了一些逻辑,看看是否可以仅使用弹簧批来解决这个问题.
为了运行一个作业,我JobRunner使用以下方法创建了一个帮助器类:
public void run(Job job) {
try {
jobLauncher.run(job, new JobParameters());
} catch (JobExecutionAlreadyRunningException e) {
// Check if job is inactive and stop it if so.
stopIfInactive(job);
} catch (JobExecutionException e) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
该stopIfInactive方法:
private void stopIfInactive(Job job) {
for (JobExecution execution : jobExplorer.findRunningJobExecutions(job.getName())) {
Date createTime = execution.getCreateTime();
DateTime now = DateTime.now();
// Get running seconds for more info.
int seconds = Seconds
.secondsBetween(new DateTime(createTime), now) …Run Code Online (Sandbox Code Playgroud) 我有一个项目,仅当执行任务sonarqube后满足条件时才应运行特定的 Gradle 任务(任务)。build此任务可能会失败,因为它与有时不可用的远程服务器进行通信。如果服务器不可用,我想默默地处理错误并向控制台打印一些消息,而不是使整个构建失败。
目前我可以通过以下配置来做到这一点:
build.doLast {
if ('desired.value' == System.properties['some.prop']) {
try {
tasks.sonarqube.execute()
} catch(e) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这种方法我会收到弃用消息。读了一点之后,我应该不应该使用execute,所以我想出了这个:
if ('desired.value' == System.properties['some.property']) {
build.finalizedBy sonarqube
}
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,如果sonarqube任务失败,我的整个构建也会失败。在这种情况下我该如何处理sonarqube任务失败?
我正在使用 Gradle 4.5.1。
编辑
使用以下命令运行构建:
./gradlew build
Run Code Online (Sandbox Code Playgroud)
像下面这样修改它会导致 Gradle 不仅忽略sonarqube失败,而且build忽略我不想要的失败:
./gradlew build --continue
Run Code Online (Sandbox Code Playgroud) 我设置了一个 Spring Web 应用程序,其中有两个数据源,一个是主数据源,一个是辅助数据源。这两个数据源大部分共享除用户名、密码和 url 之外的所有配置属性。随着公共属性列表的不断增长,我想对两个数据源使用公共配置属性,并且仅指定要为辅助数据源和其他数据源覆盖哪些属性。例如,我设置了我的主要数据源 bean,如下所示:
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
Run Code Online (Sandbox Code Playgroud)
在辅助数据源中:
@Value("${spring.secondaryDatasource.url}")
private String databaseUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driver;
@Bean
public DataSource secondaryDataSource() {
return DataSourceBuilder
.create()
.url(databaseUrl)
.username(username)
.password(password)
.driverClassName(driver)
.build();
}
Run Code Online (Sandbox Code Playgroud)
我还设置了一个与我当前设置类似的示例项目: https://github.com/Edvinas01/MultipleDatasources
是否可以注入重复属性(例如驱动程序名称和其他属性),同时仅指定要覆盖的属性?像这样的东西(这不起作用):
@Bean
@ConfigurationProperties(prefix = "spring.datasource") // Inject default properties
public DataSource secondaryDataSource() {
return DataSourceBuilder
.create()
.url(databaseUrl) // Override url
.username(username) // Override username
.password(password) // Override password …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用无效结构解析json,该结构具有使用Jackson库的重复键.如果json有重复键,我想将它们作为一个提取Collection.
我正在尝试解析的示例(我正在尝试解析的实际json来自Wiresharkjson export):
{
"a": "a",
"a": {
"b": {
},
"b": true
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于此json具有重复键,因此仅保留最后一个值:
JsonNode tree = new ObjectMapper().readTree(json);
System.out.println(tree); // {"a":{"b":true}}
Run Code Online (Sandbox Code Playgroud)
我也尝试过Guava有Multimap支持的模块,但它不能像嵌套的json对象那样工作.
我之前展示的json使用Guava模块的示例:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new GuavaModule());
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Multimap read = mapper.readValue(json, Multimap.class);
System.out.println(read); // {a=[a, {b=true}]}
Run Code Online (Sandbox Code Playgroud)
我应该如何使用Jackson库来解决这个问题?是否还有其他库可以支持解析java的这种json结构?
我有一个TeamCity(版本2017.2.4)项目,其中包含多个配置,这些配置附加到各种GitHub存储库.现在我想为其中一些配置设置SonarQube GitHub插件.为此,我创建了一个新的构建并附加了一个VCS Trigger.为了使这个触发器工作,我还附加了我想要运行的所有VCS根目录.现在,在对这些VCS根进行任何更改之后,将触发构建.
为了使用这个插件,在每次触发后我需要提取受影响的存储库名称并获取拉取请求ID.如果我有一个带有以下脚本的VCS根目录,这很容易做到:
#!/usr/bin/env bash
# Exit script on any command failure.
set -e
# Pass parameter to next TeamCity build step.
param() {
echo "##teamcity[setParameter name='$1' value='$2']"
}
# Full GitHub repository name.
repository="myOrg/$(echo '%vcsroot.url%' | grep -oP '(?<=\/).*(?=\.git)')"
# Full URL to fetch branch pull request info.
url="https://api.github.com/repos/${repository}/pulls"
url="${url}?head=%teamcity.build.branch%"
url="${url}&access_token=%github.authToken%"
echo "Fetching PR information from: ${url}"
res=$(curl "${url}" -f)
echo "Parsing PR id from:"
echo "${res}"
pullRequest=$(echo "${res}" | grep -oP -m 1 …Run Code Online (Sandbox Code Playgroud) java ×3
spring-boot ×2
build.gradle ×1
git ×1
github ×1
gradle ×1
jackson ×1
json ×1
sonar-runner ×1
sonarqube ×1
spring ×1
spring-batch ×1
teamcity ×1