当尝试从原型(使用mvn archetype:generate)生成Maven项目时,该命令返回许多原型.
有没有办法过滤给出一个单词的原型(包含在groupId或artifactId中)?
我知道你实际上可以创建一个具有特定原型的项目,带有类似的参数-DgroupID=org.domain -DartifactId=sample,但它不是我想要的.
我最近尝试将我的Gradle构建升级到SonarQube插件2.2并遇到以下错误:
Caused by: java.lang.IllegalStateException: No files nor directories matching '[/opt/bamboo-home/xml-data/build-dir/SPR-SONAR-JOB1/spring-core/build/libs/spring-cglib-repack-3.2.4.jar' in directory /opt/bamboo-home/xml-data/build-dir/SPR-SONAR-JOB1/spring-aop
org.sonar.batch.scan.ProjectReactorBuilder.validateDirectories(ProjectReactorBuilder.java:302)
org.sonar.batch.scan.ProjectReactorBuilder.loadChildProject(ProjectReactorBuilder.java:217)
org.sonar.batch.scan.ProjectReactorBuilder.defineChildren(ProjectReactorBuilder.java:192)
org.sonar.batch.scan.ProjectReactorBuilder.execute(ProjectReactorBuilder.java:116)
org.sonar.batch.scan.ProjectScanContainer.projectBootstrap(ProjectScanContainer.java:120)
org.sonar.batch.scan.ProjectScanContainer.doBeforeStart(ProjectScanContainer.java:98)
org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:91)
org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
org.sonar.batch.scan.ScanTask.scan(ScanTask.java:64)
org.sonar.batch.scan.ScanTask.execute(ScanTask.java:51)
org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:125)
org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:173)
org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.executeOldVersion(BatchIsolatedLauncher.java:70)
org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
com.sun.proxy.$Proxy77.executeOldVersion(Unknown Source)
org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:238)
org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
org.sonarqube.gradle.SonarQubeTask.run(SonarQubeTask.java:93)
Run Code Online (Sandbox Code Playgroud)
这spring-cglib-repack-3.2.4.jar确实存在于spring-core/build/libs/文件夹中,因为我的构建是在自定义jarjar任务中重新打包cglib依赖项.
看来该插件正在该spring-aop文件夹下寻找该资源,因此是例外.
请注意,相同的配置适用于2.1版本.
我想使用Spring Boot 2(暂时构建快照)启动一个新项目,然后使用Spring Framework 5(也是前沿).原因是春季5应该有很多改进的Kotlin支持,我想使用Kotlin.
现在我发现的示例使用Spring Boot 1.4.3,当然还有Gradle,当然还有基于Kotlin的Gradle文件.说实话,对于一个项目来说,这对我来说是太多新技术.我甚至不知道如何在Gradle(Kotlin-Gradle!)构建脚本中添加新的存储库.我更喜欢Maven项目,因为我至少对它很熟悉,而全新的Spring和Kotlin将会有足够的实验.
那么,如何在Maven中做到这一点?kotlin-spring我在Gradle中看到的插件是什么?
默认情况下,spring web flux使用netty,它是单线程事件循环.如何配置spring boot以便为每个核心创建一个线程.
谢谢,
LOKESH
Kotlin协程允许通过返回Deferred值来执行非阻塞代码.这对于在使用阻塞方法(例如来自库)时制作非阻塞代码非常有用.
Spring 5允许使用Mono和Flux进入框架.我看到的最大兴趣是能够序列化这两种类型的实例,并在有人调用控制器端点时将其作为响应发送回来.
Spring 5的一个重点是对Kotlin(路由器,bean声明......)有一个特定的支持,但是我找不到关于Kotlin协同程序和Spring 5反应类型之间可能的相互作用的信息.
有没有办法结合这些功能的优势?
Deferred成Mono/ Flux?Deferred响应类型的Spring控制器方法?如果不是,在哪种情况下,如果我们有Spring 5反应类型,协程是否有意义?
我有一个spring-webflux API,它在服务层需要从使用JDBC的现有存储库中读取.
在完成了关于这个主题的阅读之后,我想将阻塞数据库调用的执行与其他非阻塞异步代码分开.
我已经定义了一个专用的jdbcScheduler:
@Bean
public Scheduler jdbcScheduler() {
return Schedulers.fromExecutor(Executors.newFixedThreadPool(maxPoolSize));
}
Run Code Online (Sandbox Code Playgroud)
以及使用它的AsyncWrapper实用程序:
@Component
public class AsyncJdbcWrapper {
private final Scheduler jdbcScheduler;
@Autowired
public AsyncJdbcWrapper(Scheduler jdbcScheduler) {
this.jdbcScheduler = jdbcScheduler;
}
public <T> Mono<T> async(Callable<T> callable) {
return Mono.fromCallable(callable)
.subscribeOn(jdbcScheduler)
.publishOn(Schedulers.parallel());
}
}
Run Code Online (Sandbox Code Playgroud)
然后用于包装jdbc调用,如下所示:
Mono<Integer> userIdMono = asyncWrapper.async(() -> userDao.getUserByUUID(request.getUserId()))
.map(userOption -> userOption.map(u -> u.getId())
.orElseThrow(() -> new IllegalArgumentException("Unable to find user with ID " + request.getUserId())));
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1)我是否正确地将阻塞调用的执行推送到另一组线程?对于这些东西相当新,我正在努力与subscribeOn()/ publishOn()的复杂性.
2)假设我想使用生成的单声道,例如调用带有userIdMono结果的API,将在哪个调度程序上执行?专门为jdbc调用创建的那个,或者反应堆通常在其中运行的主(?)线程?例如
userIdMono.map(id -> someApiClient.call(id));
Run Code Online (Sandbox Code Playgroud) 我尝试安装我的Spring Boot应用程序.作为第一步,我尝试创建一个可执行jar,如下所述:https: //docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
但是,如果我使用以下行扩展我的gradle脚本(我正在使用gradle 4.4):
springBoot {
executable = true
}
Run Code Online (Sandbox Code Playgroud)
然后构建失败并出现错误:
FAILURE: Build failed with an exception.
* Where:
Build file 'D:\spring\app\build.gradle' line: 15
* What went wrong:
A problem occurred evaluating root project 'app'.
> Could not find method springBoot() for arguments [build_3mwux4us8m2jn9yfcogqkbm4y$_run_closure1@506b241f] on root project 'app' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
我的构建脚本如下:
buildscript {
ext {
springBootVersion = '2.0.0.M6'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我调用 4 个不同的 api(全部位于不同的主机上)。我希望为每个主机和其他参数(例如保持活动状态等)都有一个单独的连接池。我可以使用单个 WebClient 实现此目的还是需要 4 个不同的 WebClient 实例来实现此目的?
另外,为每个主机拥有单独的连接池是否有意义?如果没有,我可以使用单个 WebClient 来实现此目的吗?
在我的服务中,我必须从一些带有参数的不同网址获取响应。
我正在使用 WebClient 来完成以下工作。
public class WebClientTest {
private WebClient webClient = WebClient.builder().build();
@Test
public void webClientTest() {
Mono<String> a = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("a.com").port(8080).path("/path1")
.queryParam("param1", "v1")
.build())
.retrieve()
.bodyToMono(String.class);
Mono<String> b = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("b.com").port(8080).path("/path2")
.queryParam("param2", "v2")
.build())
.retrieve()
.bodyToMono(String.class);
Mono<String> c = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("c.com").port(8080).path("/path3")
.queryParam("param3", "v3")
.build())
.retrieve()
.bodyToMono(String.class);
//zip the result
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我必须一次又一次地分别设置方案、主机、端口。
所以我的问题是:
1.我是否以正确的方式使用WebClient?
2. 是否可以在一个方法中同时设置scheme、host、port?我知道这是webClient.get().uri("http://a.com:8080/path1?param1=v1").retrieve()可行的,但我期待的是:
webClient.get()
.uri(uriBuilder -> uriBuilder/*.url("http://a.com:8080/path1")*/
.queryParam("param1", "v1")
.build())
.retrieve() …Run Code Online (Sandbox Code Playgroud) createExpressionHandler目前,我已经通过覆盖GlobalMethodSecurityConfiguration. 代码是
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private ApplicationContext applicationContext;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
CustomMethodSecurityExpressionHandler expressionHandler = new CustomMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator());
expressionHandler.setApplicationContext(applicationContext);
return expressionHandler;
}
}
Run Code Online (Sandbox Code Playgroud)
-- CustomMethodSecurityExpressionHandler 类
public class CustomMethodSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandler {
private ApplicationContext applicationContext;
private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
@Override
protected MethodSecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication,
MethodInvocation invocation) {
CustomMethodSecurityExpressionRoot root = new CustomMethodSecurityExpressionRoot(authentication);
root.setPermissionEvaluator(getPermissionEvaluator());
root.setTrustResolver(this.trustResolver);
root.setRoleHierarchy(getRoleHierarchy());
root.setG(this.applicationContext.getBean(CustomTraversalSource.class));
return root;
}
//This setter …Run Code Online (Sandbox Code Playgroud) spring-boot ×4
spring ×3
java ×2
kotlin ×2
coroutine ×1
gradle ×1
maven ×1
maven-3 ×1
maven-plugin ×1
sonarqube ×1