小编Mar*_*tin的帖子

Spring Boot 2.5.4 应用程序中 JedisClient 初始化时出现 ClassNotFoundException

我有一个 Spring Boot 2.5.4 应用程序,我想在其中添加 Redis 并通过 Spring Data Redis 访问它。我当前的配置如下所示:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <relativePath/>
  </parent>
  <groupId>com.application</groupId>
  <artifactId>ApiGateway</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ApiGateway</name>
  <description>ApiGateway</description>
  <properties>
    <java.version>15</java.version>
    <spring-boot-starter-redis.version>2.5.0</spring-boot-starter-redis.version>
    <redis.version>3.1.0</redis.version>
  </properties>
  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
      <version>${spring-boot-starter-redis.version}</version>
    </dependency>

    <!-- OTHER DEPENDENCIES -->
    
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>${redis.version}</version>
      <type>jar</type>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-cognitoidp</artifactId>
      <version>${aws.sdk.version}</version>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
      <version>${aws.sdk.version}</version>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-core</artifactId>
      <version>${aws.sdk.version}</version>
    </dependency>

    <!-- OTHER DEPENDENCIES --> …
Run Code Online (Sandbox Code Playgroud)

java redis jedis spring-data-redis spring-boot

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

如何总结对象列表的各个字段并以单个对象的形式返回结果

我有一种方法可以为从API请求调用中接收到的对象列表计算营养素。

该方法如下所示:

public Nutrients nutrientsCalculator(DailyMeals dailyMeals) {

    String foodNamesForRequest = prepareFoodNamesForRequest(dailyMeals);

    HttpEntity<NutrientsBodyForRequest> requestBody = prepareRequestForAPICall(foodNamesForRequest);

    ResponseEntity<List<FoodNutritional>> response =
        //create request here

    if (nonNull(response.getBody())) {

      double totalFat = response.getBody()
          .stream()
          .map(FoodNutritional::getTotalFat)
          .mapToDouble(Double::doubleValue)
          .sum();

      double totalProtein = response.getBody()
          .stream()
          .map(FoodNutritional::getProtein)
          .mapToDouble(Double::doubleValue)
          .sum();

      double totalCarbohydrates = response.getBody()
          .stream()
          .map(FoodNutritional::getTotalCarbohydrate)
          .mapToDouble(Double::doubleValue)
          .sum();

      double totalDietaryFiber = response.getBody()
          .stream()
          .map(FoodNutritional::getDietaryFiber)
          .mapToDouble(Double::doubleValue)
          .sum();

      return Nutrients.builder()
          .carbohydrates(totalCarbohydrates)
          .protein(totalProtein)
          .fat(totalFat)
          .dietaryFiber(totalDietaryFiber)
          .build();
    }
    return new Nutrients();
  }
Run Code Online (Sandbox Code Playgroud)

我的FoodNutritional.class看起来像:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
class …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

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

获取 MongoCommandException:命令失败,错误 18(AuthenticationFailed):“身份验证失败。” 在服务器本地主机上:27017

我想与我在 docker 中运行的 MongoDB 数据库建立连接。应用程序似乎开始时没有任何问题,但是当我尝试调用简单的 GET 之类的任何请求时:

localhost:8082/devices
Run Code Online (Sandbox Code Playgroud)

根据配置,我收到两个不同的错误:

有属性:

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.host=interviewTest
spring.data.mongodb.port=27017
spring.data.mongodb.username=mongoadmin
spring.data.mongodb.password=secret
server.port=8082
spring.data.mongodb.uri=mongodb://localhost:27017
spring.data.mongodb.database=interviewTest
Run Code Online (Sandbox Code Playgroud)

我收到:

com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017
Run Code Online (Sandbox Code Playgroud)

对于具有不同配置的 application.properties:

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.port=27017
spring.data.mongodb.username=mongoadmin
spring.data.mongodb.password=secret
server.port=8082
spring.data.mongodb.database=interviewTest
spring.data.mongodb.uri=mongodb://mongoadmin:secret@localhost:27017/interviewTest?retryWrites=true&w=majority

Run Code Online (Sandbox Code Playgroud)
com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }
Run Code Online (Sandbox Code Playgroud)

我创建了我的 MongoDB docker 容器,如下所示: …

java mongodb docker spring-boot

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

获取 org.mockito.exceptions.misusing.PotentialStubbingProblem:严格存根参数不匹配

我在我的应用程序中使用公共 API Nutritionix 从他们的数据库中获取有关食品成分的详细信息。我想测试一种方法,该方法向公共 API 发送 POST 请求以接收有关产品营养价值的详细信息,然后在我的应用程序的下一个过程中使用它们。

我的测试类如下所示:

@ExtendWith(MockitoExtension.class)
class CaloriesServiceTest {

  @InjectMocks
  private CaloriesService caloriesService;

  @Mock
  private RestTemplate restTemplate;

  @Mock
  private NutritionixHeader nutritionixHeader;

  @BeforeEach
  void setUp() {
    caloriesService = new CaloriesService(nutritionixHeader, restTemplate);
  }

  @Test
  void receiveNutritionInformationFromAPI() {

    given(nutritionixHeader.getNutritionixAppId()).willReturn("secretID");
    given(nutritionixHeader.getNutritionixAppKey()).willReturn("secretKey");

    var meal1 = Meal.builder()
        .mealIngredients(List.of(RecipeIngredient.builder()
            .foodName("grilled fish")
            .build()))
        .build();
    var meal2 = Meal.builder()
        .mealIngredients(List.of(RecipeIngredient.builder()
            .foodName("eggs")
            .build()))
        .build();
    var meal3 = Meal.builder()
        .mealIngredients(List.of(RecipeIngredient.builder()
            .foodName("bacon")
            .build()))
        .build();

    var dailyMeals = DailyMeals.builder().dailyMeals(List.of(meal1, meal2, meal3)).build();

    var foodNutritional1 = FoodNutritional.builder().foodName("food name1").calories(11.1).build();
    var foodNutritional2 = …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing mockito

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

流过滤器中的 ContainsIgnoreCase 以计算字符串列表中某个特定单词的出现次数

我想在 java 中的字符串列表中计算单个单词的出现次数。看似这个任务很简单,但我遇到了一个问题,单词以大写字母开头或包含,.在单词末尾。我的方法看起来像:

public static Long countWordOccurence(List<String> wordList, String word) {

    return wordList.stream()
        .filter(s -> word.contains(s))
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        .values()
        .stream()
        .findFirst()
        .orElse((long) -1);
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码在正常情况下工作正常,但问题发生在像字符串末尾的昏迷Test,或以大写字母开头的字符串这样的角落情况下。

我正在拆分我的字符串列表,如:

Arrays.asList(TEXT_TO_PARSE.split(" ")); 
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我会很感激避免额外的依赖,但如果有必要,我不会鄙视。

我将不胜感激关于如何在流中修复我的过滤器子句以正确计算字符串的建议。

java functional-programming java-8 java-stream

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

如何限制 Flux&lt;Map&lt;K,V&gt;&gt; 中的元素数量并将其映射到自定义结果

假设我有一些课程来说明歌曲和投票的问题。

用户.java

@EqualsAndHashCode
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Document(collection = "users")
public class User {

  @Id private String id;

  private String username;

  private String email;

  private Integer age;

  private String password;

  @DBRef(db = "interview", lazy = true)
  @EqualsAndHashCode.Exclude
  @ToString.Exclude
  private Set<Song> songs;
}
Run Code Online (Sandbox Code Playgroud)

歌曲.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Song {

  @Id private String id;

  private String title;

  private String author;

  private SongGenre songGenre;

  Set<Vote> votesOfSong;
}
Run Code Online (Sandbox Code Playgroud)

投票.java

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "votes")
@Getter
public class Vote {

  @Id …
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-stream spring-webflux java-11

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

如何在 docker-compose.yml 中使用多行命令标志配置 MySQL 实例

我想使用 docker 镜像启动 MySQL 本地实例。

到目前为止我的docker-compose.yml文件如下所示:

version: '3.3'

services:
   db:
     image: mysql:8
     command: --default-authentication-plugin=mysql_native_password
     volumes:
       - ./mysql-dump:/docker-entrypoint-initdb.d
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: admin
       MYSQL_DATABASE: sqlPractice
       MYSQL_USER: admin
       MYSQL_PASSWORD: admin
     ports:
      - '7142:3306'
     security_opt:
      - seccomp:unconfined
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常。我的数据库提供了数据,但在执行一次查询后,如下所示:

SELECT DISTINCT surname, name, data FROM exams e JOIN students s ON e.`id-student` = s.`id-student` WHERE passed='Y' AND (data, `id-centre`) = (SELECT MIN(data), e.`id-centre` FROM exams e JOIN centers c ON e.`id-center` = c.`id-center` WHERE e.passed='Y' AND c.`center-name` = 'IT Institute') 
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

ER_MIX_OF_GROUP_FUNC_AND_FIELDS: …
Run Code Online (Sandbox Code Playgroud)

mysql docker docker-compose

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

如何以功能方式将字符串中的数字求和直到特定索引

我想总结来自例如的数字。String像 "153" 直到索引 2 并6因为 1+5=6而收到结果。在正常情况下,我会使用经典的循环解决方案,例如检查当前索引是否低于 2:

static int sum(String s){
       int sum = 0;
        for(int i = 0; i < s.length() ; i++){
            if( Character.isDigit(s.charAt(i)) ){
                sum = sum + Character.getNumericValue(s.charAt(i));
            }
        }
        return sum;
}
Run Code Online (Sandbox Code Playgroud)

上面的方法可以正常工作,但我想将此逻辑重写为 Javastream方法。

我有一个实现,如:

  public static int sumDigitsTillIndex(String number) {
    return IntStream.range(0, number.length())
        .filter(i -> i < 2)
        .map(number::charAt)
        .sum();
  }
Run Code Online (Sandbox Code Playgroud)

对于这个参数 153,我收到了 102,这对我来说是一个惊喜。

我找到了另一个类似的解决方案,例如:

   return String
    .valueOf(number)
    .chars()
    .map(Character::getNumericValue)
    .sum();
Run Code Online (Sandbox Code Playgroud)

这是正确地对数字求和,但使用其他filter方法,例如: .filter(index -> number.charAt(index) < …

java functional-programming java-stream java-11

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

如何将 Mono&lt;&gt; 结果从上一步传递到下一个 doOnSuccess() 方法

假设我有一个方法,addVoteToSong例如:

public Mono<Map<Song, VoteKind>> addVoteToSong(Principal principal, String songId, VoteKind voteKind) {
        return
            userRepository.findUserByUsername(principal.getName())
            .doOnSuccess(song -> songRepository.findSongById(songId))
            .doOnSuccess(vote -> voteRepository.add(Vote.builder().song()))
            .//(the rest of the code) 
}
Run Code Online (Sandbox Code Playgroud)

我想从该行传递一个结果:

userRepository.findUserByUsername(principal.getName())
Run Code Online (Sandbox Code Playgroud)

.doOnSuccess(song -> songRepository.findSongById(songId))
Run Code Online (Sandbox Code Playgroud)

到该行中的构建对象:

.doOnSuccess(vote -> voteRepository.add(Vote.builder().song(here result from findSongById).user(here result from findUserByUsername))
Run Code Online (Sandbox Code Playgroud)

那么问题来了,是否可以在下一个doOnSuccess方法中重用以前的API调用结果,或者我应该同时拆分find API调用,放弃Reactor的级联操作?在互联网上,我找到了save没有基于反应流的间接结果的单一方法的例子,这就是问题发生的原因。我将不胜感激有关如何实现目标的建议。

java spring project-reactor spring-webflux

0
推荐指数
1
解决办法
774
查看次数