小编Bri*_*zel的帖子

使用archetype:generate过滤Maven命令行中的原型

当尝试从原型(使用mvn archetype:generate)生成Maven项目时,该命令返回许多原型.

有没有办法过滤给出一个单词的原型(包含在groupId或artifactId中)?

我知道你实际上可以创建一个具有特定原型的项目,带有类似的参数-DgroupID=org.domain -DartifactId=sample,但它不是我想要的.

maven-plugin maven-3 maven-archetype

6
推荐指数
1
解决办法
7157
查看次数

对于不存在的JAR,"IllegalStateException:没有匹配的文件或目录"

我最近尝试将我的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版本.

sonarqube sonarqube-scan

6
推荐指数
2
解决办法
7562
查看次数

Spring Boot 2和Kotlin(与Maven合作)

我想使用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 maven kotlin spring-boot

6
推荐指数
1
解决办法
2041
查看次数

如何在spring boot 2中配置netty

默认情况下,spring web flux使用netty,它是单线程事件循环.如何配置spring boot以便为每个核心创建一个线程.

谢谢,

LOKESH

spring-boot reactor-netty spring-webflux

6
推荐指数
1
解决办法
9565
查看次数

Kotlin协程和Spring Framework 5反应型

Kotlin协程允许通过返回Deferred值来执行非阻塞代码.这对于在使用阻塞方法(例如来自库)时制作非阻塞代码非常有用.

Spring 5允许使用MonoFlux进入框架.我看到的最大兴趣是能够序列化这两种类型的实例,并在有人调用控制器端点时将其作为响应发送回来.

Spring 5的一个重点是对Kotlin(路由器,bean声明......)有一个特定的支持,但是我找不到关于Kotlin协同程序和Spring 5反应类型之间可能的相互作用的信息.

有没有办法结合这些功能的优势?

  • 转换DeferredMono/ Flux
  • 有一个Deferred响应类型的Spring控制器方法?

如果不是,在哪种情况下,如果我们有Spring 5反应类型,协程是否有意义?

spring coroutine kotlin spring-webflux kotlinx.coroutines

6
推荐指数
1
解决办法
1860
查看次数

在项目反应器中包装阻塞I/O.

我有一个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)

java project-reactor

6
推荐指数
1
解决办法
2882
查看次数

可执行的Spring Boot 2 jar

我尝试安装我的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)

gradle spring-boot

6
推荐指数
1
解决办法
4644
查看次数

多个主机的多个 WebClients ( Spring webflux )

在我的应用程序中,我调用 4 个不同的 api(全部位于不同的主机上)。我希望为每个主机和其他参数(例如保持活动状态等)都有一个单独的连接池。我可以使用单个 WebClient 实现此目的还是需要 4 个不同的 WebClient 实例来实现此目的?

另外,为每个主机拥有单独的连接池是否有意义?如果没有,我可以使用单个 WebClient 来实现此目的吗?

reactive-programming spring-webflux

6
推荐指数
1
解决办法
4569
查看次数

如何设置WebClient的基本url和查询参数?

在我的服务中,我必须从一些带有参数的不同网址获取响应。

  1. 从http://a.com:8080/path1?param1=v1获取
  2. 从http://b.com:8080/path2?param2=v2获取
  3. 从http://c.com:8080/path3?param3=v3获取

我正在使用 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)

spring spring-webflux

6
推荐指数
1
解决办法
2万
查看次数

GlobalMethodSecurityConfiguration 在 Spring Boot 3 中已弃用,如何在 3 中创建自定义表达式处理程序?

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)

java spring-security spring-boot

6
推荐指数
1
解决办法
6621
查看次数