RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-216828

Вячеслав Чернышов's questions

Martin Hope
Вячеслав Чернышов
Asked: 2020-07-02 21:46:26 +0000 UTC

Kotlin Lambdas:如何将一组对象“收集”成一个对象?

  • 1

我有一个对象:

data class DayNutrientsDto(val proteins: Double,
                            val carbohydrates: Double,
                            val fats: Double,
                            val calories: Int,
                            val userId: Long,
                            val date: LocalDate)

我有一个这样的对象的集合,比方说list。我需要添加对象的所有字段,具有相同的字段

proteins + proteins + proteins..., fats + fats + fats...

并获得一个对象而不是一个集合。你能告诉我如何使用 lambda 来做到这一点吗?

kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-06-26 22:46:20 +0000 UTC

Kotlin:处理 lambda 表达式中的其他值

  • 0

我有 userDto 包含programs,其中包含 field actual。当前只能有一个程序。我需要得到这样的程序。我正在执行以下操作:

userDto.programs.sortedBy { it.created }.findLast { it.actual }?

好的,但是我想提供一个程序根本不出现并findLast返回 null 并抛出异常的情况。编写表达式来执行此操作的最佳方法是什么?

kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-06-24 02:16:20 +0000 UTC

Kotlin:如何通过接口实现验证?

  • 0

在这里,假设我有一个 DTO:

open class ContactDto: AbstractDto() {

    open var phone: String? = null
    open var email: String? = null
    open var user: Long? = null
}

我需要确保在创建实体时需要电话字段并且未更新。也就是说,对于某些情况@Null,对于其他情况 - @NonNull。在Java中,这个问题是通过接口来解决的,例如:

interface Validate {

    interface Create {}
    interface Update {}
}

然后用所需的接口标记字段,例如,在 Java 中,它看起来像这样:

public interface Validate2 {

    interface Create {}
    interface Update {}
}

并将其挂在场地上(稍后也挂在控制器上):

@NotNull(groups = {Validation.Create.class})
@Null(groups = Validation.Update.class)
public String phone;

在 Kotlin 中,像往常一样,惊喜等着我:

在此处输入图像描述

告诉我如何为验证创建标记类以及如何将它们挂在字段上?如果立即提供如何在控制器中完成此操作的示例,我将不胜感激。

kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-06-09 14:22:45 +0000 UTC

Kotlin:如何将自动装配的 bean 从抽象拖到继任者?

  • 0

所以我有一堂课:

open class AbstractMapper<E : AbstractEntity, D : AbstractDto> @Autowired constructor(

        protected val mapper: ModelMapper

) : EntityDtoMapper<E, D>

它在主构造函数中有一个自动装配的 ModelMapper bean。我正在尝试从这个类继承。

class UserParamsMapper : AbstractMapper<UserParams, UserParamsDto>()

IDE 要求我在 AbstractMapper 构造函数中声明其中声明的所有字段,直到该字段:

No value passed for parameter ModelMapper

告诉我怎么做?或者是否可以通过其他方式在 AbstractMapper 中自动装配 bean 并避免这种情况?

spring
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-06-07 19:55:45 +0000 UTC

打字问题

  • 1

所以,我有实体,有几件。

InputField
CheckBoxField
SelectField

它们都继承自同一个抽象实体AbstractEntity。对于每个实体,都有一个继承自 CommonRepository 的存储库:

@NoRepositoryBean
public interface CommonRepository<E extends AbstractEntity> extends JpaRepository<E, Long>

我将存储库自动连接到服务中:

@Service
public class ShiftServiceImpl implements ShiftService

并将其放入地图<дискриминатор, бин репозитория>中,如下所示:

private Map<String, CommonRepository> fieldRepositories;
fieldRepositories = new HashMap<>();
fieldRepositories.put("input", inputFieldRepository);
fieldRepositories.put("checkbox", checkBoxFieldRepository);
fieldRepositories.put("select", selectFieldRepository);

接下来,我得到一个形式为 的实体鉴别器String。而且,在鉴别器确定了什么样的实体之后,我想通过相应的存储库 bean 拉出我需要的实体。也就是说,像这样:

fieldRepositories.get(e.get("type"))
                            .findById(id)
                            .ifPresent(i -> entities.add(i));

同时,IDEA 不允许我这样做,强调后者i写道:

add (ru.field.AbstractField) in List cannot be applied to
    (java.lang.Object)

告诉我如何正确键入类/映射以使一切正常?

升级版:

多亏了一位同事的回答,它起作用了,但是现在它没有完全检查类型(未经检查的演员表):

在此处输入图像描述

UPD2:

该评论有所帮助,但现在它在另一个地方掉了下来,同时保存了实体:

    entities
            .forEach(e -> {
                fieldRepositories.get(e.getFieldType().getName()).save(e);
            });

在此处输入图像描述

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-05-24 21:35:29 +0000 UTC

数据库初始化不起作用

  • 0

我通过flyway初始化数据库,之后,如果应用程序在本地运行,我需要运行带有测试数据的脚本。Flyway 工作正常,但测试脚本存在一些困难——它们不起作用。初始化属性如下所示:

# data source properties
# ��������� �� - ��. DatasourceConfig

database.port=5482

#spring.datasource.url=jdbc:postgresql://127.0.0.1:${database.port}}/
#spring.datasource.username=postgres
#spring.datasource.password=

spring.datasource.initialize=true
spring.datasource.character=utf-8
spring.datasource.embedded-directory = target
#spring.datasource.schema=classpath:db/migration/common/V001__schema.sql
spring.datasource.data=classpath:db/migration/dev/init.sql

# JPA properties
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL9Dialect
spring.jpa.show-sql=true
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

# migration properties
spring.flyway.enabled=true
spring.flyway.check-location=false
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=0
spring.flyway.locations=classpath:db/migration/common

根据初始化逻辑,应该执行变量可访问的脚本

spring.datasource.data=classpath:db/migration/dev/init.sql

但基地是空的。告诉我出了什么事?

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-05-11 23:12:29 +0000 UTC

将 DTO 转换为实体:最好的地方在哪里?

  • 2

因此,经典的 Web 应用程序架构。控制器、服务、映射器(将 dto 映射到实体并返回)。在某些层中,您需要自动装配映射器并将 dto 转换为实体并返回。有两种方法。

  1. 控制器中的转换。因此,服务已经接受了一个具有所有依赖关系的实体并返回一个实体(它再次在控制器中转换为 dto 并发送到前面)。这种做法的背后是考虑到 dto 是从外部接收的数据,这意味着它必须尽早转换为实体,并以实体的形式进入其他层。此外,当我们需要在服务 B 中获取实体 A 时,这种方法也得到了支持。然后在服务 B 中,我们自动装配服务 A,通过实体 ID 转到服务 A 并获取实体,但服务返回 dto,现在它将接收到的 dto 中的实体转换为返回到服务 B 的实体,并在那里将 dto 反向转换为实体,填充依赖项并前往基础。还是我们必须编写第二种方法public Car get(Long id)除了public CarDto get(Long id). 这也没有简化代码。

  2. 服务转型。这种方法涉及仅使用实体来处理存储库。该方法的优点是dto在依赖方面比实体轻得多,并且在服务之间驱动它更容易,并且使用dto更容易。无需考虑使用实体的数据一致性、延迟初始化和其他微妙之处。此外,它允许您控制对数据库的所有请求,如果我们需要依赖项,我们只需根据 dto 数据获取它,从而避免了为了获取 int 字段而必须拉整个实体的情况数据库中的依赖树并将其存储在内存中。

所以,先生们,我想听听你们对此的看法。

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-03-12 00:28:47 +0000 UTC

Spring Data JPA 规范

  • 0

我需要通过规范提出请求,其中我将从选择中排除几个 ID。

我是这样做的:

case "not_in":
    ArrayList<Integer> list = Lists.newArrayList(
            Arrays
                    .stream(filter.getValue().toString().split("\\s*,\\s*"))
                    .map(Integer::parseInt)
                    .collect(Collectors.toList())
     );
     predicate = criteriaBuilder.not(root.get(filter.getField())).in(list);
     break;

作为规范的结果,我希望看到与此类似的查询:

select generatedAlias0 
from ru.gamble.main.domain.AuthLog as generatedAlias0 
    where generatedAlias0.userId not in (11523666) 
order by generatedAlias0.dateTime desc

生成以下请求:

select generatedAlias0 
from ru.gamble.main.domain.AuthLog as generatedAlias0 
    where generatedAlias0.userId <> true in (11523666) 
order by generatedAlias0.dateTime desc

原则上请求是有效的,如果在控制台中作为脚本执行,就会正常执行。但在 Hibernate 的情况下,它给出了以下内容:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException:
    unexpected AST node: 
    in near line 1, column 115 
    [select generatedAlias0 from ru.main.domain.AuthLog as generatedAlias0 
    where generatedAlias0.userId <> true in (11523666)
    order by generatedAlias0.dateTime desc]

任何想法如何解决这个问题?

HIBERNATE_VERSION = "4.3.10.Final"
SPRING_DATA_VERSION = "1.11.10.RELEASE"
java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-02-24 19:25:33 +0000 UTC

Mockito:如何模拟 Class 参数?

  • 0

我在 Mockito 下运行了一个测试:

@RunWith(MockitoJUnitRunner.Silent.class)

在这个测试中,我需要锁定以下方法:

mapper.map(dto, Entity.class)

(这是一个映射器)。

例如,像这样:

when(mapper.map(any(), any()).thenReturn(result);

如果 mokat 简单(any(), any()),将无法正常工作。

如何正确描述模拟中的第二个参数,以便一切正常?

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-02-01 16:39:28 +0000 UTC

SQL:如何根据一对唯一值进行选择?

  • 0

我有一个 table logs,它有,比如说,以下字段;

user_IP     varchar(128)
fingerprint varchar(255)

我需要按一对进行分组"user_IP" + "fingerprint",即显示所有唯一对"user_IP" + "fingerprint",并指示分组行数(匹配特定对)。

样本输出:

+-------------+----------------+--------------------+
| user_IP     | fingerprint    | count (совпадений) |
+-------------+----------------+--------------------+
| 10.20.30.40 | 0c013cb7e36bbe |                322 |
+-------------+----------------+--------------------+
| 20.30.40.50 | 9f051f4a62bf7a |                  4 |
+-------------+----------------+--------------------+

告诉我怎么做?

sql
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-11-27 15:33:00 +0000 UTC

SQL 语法错误:WITH 语句

  • 0

我对 mariaDB 有一个查询:

SELECT AVG(selectOnStop.time_avg)                                             AS global_avg_time,
       AVG(selectFromStopTaskProcessor.time_avg)                              AS qmr_task_time,
       AVG(selectOnStop.time_avg) - AVG(selectFromStopTaskProcessor.time_avg) AS postprocessing
FROM (SELECT
        global_task_id,
        SUM(time_from_start),
        SUM(time_from_start) / 1000000 AS time_avg
      FROM task AS t
             INNER JOIN recorderevent AS r ON (CONCAT(r.task_id, '0', SUBSTRING(r.`shard_alias` FROM 7)) = t.id)
      WHERE r.event_name = 'STOP'
      GROUP BY global_task_id
      ORDER BY SUM(time_from_start) DESC) AS selectOnStop
       JOIN (SELECT global_task_id, SUM(time_from_start) / 1000000 AS time_avg
             FROM task AS t
                    INNER JOIN recorderevent AS r ON (CONCAT(r.task_id, '0', SUBSTRING(r.`shard_alias` FROM 7)) = t.id)
             WHERE r.event_name = 'QMR_STOP_TASK_PROCESSOR'
             GROUP BY global_task_id
             ORDER BY SUM(time_from_start) DESC) AS selectFromStopTaskProcessor;

该请求正在运行。我决定使用 WITH 语句重写它。

WITH selectOnStop (time_start, time_avg) AS (SELECT
                                               SUM(time_from_start)           AS time_start,
                                               SUM(time_from_start) / 1000000 AS time_avg
                                             FROM task AS t
                                                    INNER JOIN recorderevent AS r
                                                               ON (CONCAT(r.task_id, '0', SUBSTRING(r.`shard_alias` FROM 7)) = t.id)
                                             WHERE r.event_name = 'STOP'
                                             GROUP BY global_task_id
                                             ORDER BY SUM(time_from_start) DESC)
    ,
     selectFromStopTaskProcessor (time_average) AS (SELECT SUM(time_from_start) / 1000000 AS time_average
                                                    FROM task AS t
                                                           INNER JOIN recorderevent AS r
                                                                      ON (CONCAT(r.task_id, '0', SUBSTRING(r.`shard_alias` FROM 7)) = t.id)
                                                    WHERE r.event_name = 'QMR_STOP_TASK_PROCESSOR'
                                                    GROUP BY global_task_id
                                                    ORDER BY SUM(time_from_start) DESC)

SELECT AVG(selectOnStop.time_avg)                                                 AS global_avg_time,
       AVG(selectFromStopTaskProcessor.time_average)                              AS qmr_task_time,
       AVG(selectOnStop.time_avg) - AVG(selectFromStopTaskProcessor.time_average) AS postprocessing
FROM selectOnStop
       JOIN selectFromStopTaskProcessor;

事实上,我只是将选择移到单独的查询中。写入以下内容:

[42000][1064] (conn=3) 检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'selectOnStop (time_start, time_avg) AS (SELECT [42000][1064]在第 1 行的 'selectOnStop (time_start, time_avg) AS (SELECT ' 附近使用正确语法的服务器版本查询是: WITH selectOnStop (time_start, time_avg) AS (SELECT SUM(time_from_start) AS time_sta ...

告诉我我做错了什么,以及需要在请求中更正哪些内容才能使其正常工作?

sql
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-11-14 13:55:39 +0000 UTC

org.h2.jdbc.JdbcSQLException:找不到架构“information_schema”;

  • 0

我决定通过 H2 运行测试。继承所有其他测试的抽象测试的注释:

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableJpaRepositories
@ActiveProfiles("dev")
public abstract class AbstractTest {
}

在 test/resources 中application-dev.yml,当“dev”配置文件处于活动状态时,应该拾取一个文件:

spring:

  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:~/streamcast;DB_CLOSE_ON_EXIT=FALSE;IFEXISTS=TRUE;DB_CLOSE_DELAY=-1;
    username: root
    password: root

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate.dialect: org.hibernate.dialect.H2Dialect
      hibernate.temp.use_jdbc_metadata_defaults: false

  profiles:
    active: dev

server:
  port: 8080

引发以下异常:

Caused by: org.h2.jdbc.JdbcSQLException: Схема "information_schema" не найдена
Schema "information_schema" not found; SQL statement:
select SEQUENCE_CATALOG, SEQUENCE_SCHEMA, SEQUENCE_NAME, INCREMENT from information_schema.sequences [90079-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.command.Parser.getSchema(Parser.java:701)
    at org.h2.command.Parser.getSchema(Parser.java:707)
    at org.h2.command.Parser.readTableFilter(Parser.java:1388)
    at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:2138)
    at org.h2.command.Parser.parseSelectSimple(Parser.java:2287)
    at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
    at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
    at org.h2.command.Parser.parseSelect(Parser.java:1919)
    at org.h2.command.Parser.parsePrepared(Parser.java:463)
    at org.h2.command.Parser.parse(Parser.java:335)
    at org.h2.command.Parser.parse(Parser.java:307)
    at org.h2.command.Parser.prepareCommand(Parser.java:278)
    at org.h2.engine.Session.prepareLocal(Session.java:611)
    at org.h2.engine.Session.prepareCommand(Session.java:549)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:78)
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorH2DatabaseImpl.extractMetadata(SequenceInformationExtractorH2DatabaseImpl.java:37)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65)
    at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:59)
    at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:132)
    ... 77 more

它在数据源设置中吗?告诉我出了什么事?

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-11-13 14:55:56 +0000 UTC

如何获取按外部表值分组的记录的值总和?

  • 0

我有一个records包含监控数据的表。例如,有一个字段time以毫秒为单位显示值。该条目看起来像这样:

(id, task_id, name, time)

还有第二张桌子,我们称之为tasks。它具有以下字段:

(id, global_task_id)

我需要创建一个包含以下内容的表:

(global_task_id, time_sum)

where将是包含在相同记录中time_sum的所有字段的总和。也就是说,对于每个,从表中收集所有的总和。告诉我怎么做?timeglobal_task_idglobal_task_idtimerecords

sql
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-11-06 20:41:48 +0000 UTC

方面不工作

  • 2

我有一个我想记录的方法。

@ApiLogBefore
public ResponseEntity save(@RequestParam("transactionId") String transactionId) throws JsonProcessingException {
...
}

有一个注释,我想通过它执行方面:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ApiLogBefore {
}

只要是空的。有一个方面:

@Aspect
@Component
@Slf4j
public class ApiLogAspectProcessor {

    @Pointcut("@annotation(ApiLogBefore)")
    public void logProcessor() {
    }

    @Before(value = "logProcessor()")
    public void before() {
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
        log.debug(">>>>>>>>>>>>>>>>>>>>");
    }
}

据我了解,当您在控制台中对 save 方法运行测试时,应该会显示输出。但是它甚至没有进入方法,断点也没有捕获任何东西。

依赖项:

compile group: 'org.springframework', name: 'spring-aop', version: '5.1.0.RELEASE'
compile group: 'org.aspectj', name: 'aspectjrt', version: '1.9.2'
compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.2'

告诉我,问题可能出在哪里?

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-10-22 23:25:25 +0000 UTC

Log4j:如何降级默认版本?

  • 0

我有一个关于 Gretty 的项目。现在该项目正在准备部署到外部服务器。事实证明,在外部服务器上有一些古老版本的码头(比如,低于 9.4),它不适用于 JEP-238。而最新版本的 log4j 只是 JEP-238。当尝试在 jetty 上运行应用程序时,它会吐出一个众所周知的错误:

https://stackoverflow.com/questions/45311295/error-scanning-entry-module-info-class-when-starting-jetty-server

基本上有两种选择:

  1. 升级jetty版本,目前无法实现
  2. 省略 log4j 版本。

问题是,log4j 没有设置为显式依赖项,而是引入了其他一些依赖项。目前还不清楚是哪一个。这是 build.gradle:

plugins {
    id 'java'
    id 'war'
    id "org.gretty" version "2.2.0"
}
group 'ru.example'
version '0.1'

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'

ext {
    SPRING_VERSION = '5.1.0.RELEASE'
    JUNIT_VERSION = '5.3.1'
    JACKSON_VERSION = '2.9.7'
    LOMBOK_VERSION = '1.18.2'
}

repositories {

    mavenCentral()
    jcenter()

    maven {
        url 'https://oss.sonatype.org/content/repositories/releases/'
    }
}

gretty {
    springBootVersion = '2.0.5.RELEASE'
    contextPath = "/"
}

dependencies {
//    annotationProcessor group: 'org.projectlombok', name: 'lombok', version: LOMBOK_VERSION
    compileOnly group: 'org.projectlombok', name: 'lombok', version: LOMBOK_VERSION
    compileOnly group: 'com.google.appengine', name: 'appengine-endpoints-deps', version: '1.9.65'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    compile group: 'org.springframework', name: 'spring-webmvc', version: SPRING_VERSION
    compile group: 'org.springframework', name: 'spring-web', version: SPRING_VERSION
    compile group: 'org.springframework', name: 'spring-jdbc', version: SPRING_VERSION
    compile ("org.springframework.security:spring-security-web:4.1.0.RELEASE") {
        exclude(module:'spring-web')
    }
    compile ("org.springframework.security:spring-security-config:4.1.0.RELEASE")
    compile ("org.springframework.security:spring-security-ldap:4.1.0.RELEASE")
    compile 'org.thymeleaf:thymeleaf-spring4:3.0.9.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.0.5.RELEASE'
    compile group: 'com.mchange', name: 'c3p0', version: '0.9.5.2'
    compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.3.0'
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: JACKSON_VERSION
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: JACKSON_VERSION
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: JACKSON_VERSION
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.0'
    compile group: 'com.google.guava', name: 'guava', version: '26.0-jre'
    compile group: 'commons-io', name: 'commons-io', version: '2.6'
    compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
    compile group: 'org.hibernate', name: 'hibernate-validator', version: '6.0.13.Final'
//    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: JUNIT_VERSION
//    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: JUNIT_VERSION
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: JUNIT_VERSION
    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.22.0'
    testCompile group: 'org.springframework', name: 'spring-test', version: SPRING_VERSION
    testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
    testCompile group: 'com.jayway.jsonpath', name: 'json-path-assert', version: '2.4.0'
    testCompile group: 'com.h2database', name: 'h2', version: '1.4.197'
}

External Libraries 存储 log4j 版本 2.10.0,但需要放 2.8 左右。我无法弄清楚要从哪个依赖项中删除 log4j 以显式设置依赖项。如果有解决方案,请告诉我该怎么做。

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-10-20 15:31:57 +0000 UTC

Gradle:将包从项目根目录添加到战争构建

  • 0

大家好。我在项目的根目录有一个包,需要添加到项目中。在默认组装时,它不会到达那里。该文件夹称为“前端”,那里没有 java 文件。该项目是使用 gretty 构建的。

java
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-10-11 15:50:38 +0000 UTC

Spring 5 + JUnit 5:IllegalStateException:未设置 ServletContext

  • 3

我正在尝试为 Spring 5 运行单元测试。有三个配置文件。

根配置:

@Configuration
@ComponentScan(basePackages = {"ru.example"})
@PropertySource("classpath:/config/app.properties")
public class RootConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

}

事务管理器配置:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("ru.example.repository")
@EntityScan("ru.example.domain")
public class TransactionManagerConfig {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws PropertyVetoException {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
        entityManagerFactoryBean.setPackagesToScan("ru.example.domain");
        return entityManagerFactoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager() throws PropertyVetoException {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
        return transactionManager;
    }

    private DataSource dataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/example");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        dataSource.setMaxPoolSize(20);
        dataSource.setMinPoolSize(3);
        dataSource.setMaxStatements(100);
        dataSource.setPreferredTestQuery("SELECT 1");
        dataSource.setTestConnectionOnCheckout(true);
        return dataSource;
    }

}

网络配置:

@Configuration
@EnableWebMvc
@ComponentScan({"ru.example"})
public class WebConfig implements WebMvcConfigurer {

    @Bean
    @SuppressWarnings("unused")
    public ViewResolver viewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry
                .addResourceHandler("/**")
                .addResourceLocations("/");
    }
}

依赖项是(对于 Spring 和 junit):

testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: JUNIT_VERSION
testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: JUNIT_VERSION
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.3.1'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.22.0'
testCompile group: 'org.springframework', name: 'spring-test', version: SPRING_VERSION
testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
testCompile group: 'com.jayway.jsonpath', name: 'json-path-assert', version: '2.4.0'
compile group: 'org.springframework', name: 'spring-webmvc', version: SPRING_VERSION
compile group: 'org.springframework', name: 'spring-web', version: SPRING_VERSION
compile group: 'org.springframework', name: 'spring-jdbc', version: SPRING_VERSION
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.0.5.RELEASE'

SPRING_VERSION = '5.1.0.RELEASE'
JUNIT_VERSION = '5.3.1'

应用程序启动并正常运行。我正在尝试创建测试。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {
        RootConfig.class,
        TransactionManagerConfig.class,
        WebConfig.class
})
class OrderServiceImplTest {

    @Test
    void save() {
    }
}

落入以下堆栈跟踪:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:620)
    ... 94 common frames omitted
Caused by: java.lang.IllegalStateException: No ServletContext set
    at org.springframework.util.Assert.state(Assert.java:73)
    at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.resourceHandlerMapping(WebMvcConfigurationSupport.java:486)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$b4bf2d2e.CGLIB$resourceHandlerMapping$34(<generated>)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$b4bf2d2e$$FastClassBySpringCGLIB$$d653d6e3.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
    at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerBySpringCGLIB$$b4bf2d2e.resourceHandlerMapping(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 95 common frames omitted

你能告诉我如何使用 JUnit 5 正确运行 Spring 测试,我做错了什么吗?

java
  • 2 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-08-14 01:03:50 +0000 UTC

SQL INSERT:如何从另一个表中插入数据?

  • 0

我需要在表中插入一条新记录。我们叫她吧task(id, task_type_id)。还有一张桌子,task_type(id, name)。

向表中添加记录时,如何通过名称字段task从表中获取所需记录的ID ?task_type

所以请求背后的逻辑是:

INSERT INTO task(task_type_id)
VALUES(<id, который соответствует такому-то полю name таблицы task_type); 
sql
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-07-31 16:32:07 +0000 UTC

SQL UPDATE 多对多

  • 0

我有两个表 -task(id, name)和method(id, max_run),它们通过 table 以多对多类型连接taskmethod(id, task_id, method_id)。

我需要为 method.max_run 条目设置一个与所需 task.name 匹配的字段值

例如,有相关条目:

task(001, 'MAIN_TASK')
taskmethod(1, 001, 005)
method(005, 10)

我设想这样的请求:

UPDATE method
SET max_run = 5
(для записи, для которой task.name = 'MAIN_TASK')

这些都是假设,因为我对 SQL 的理解很差。谢谢您的帮助。

sql
  • 1 个回答
  • 10 Views
Martin Hope
Вячеслав Чернышов
Asked: 2020-05-22 23:19:47 +0000 UTC

ObjectMapper:参数化

  • 0

我有一个 JSON 需要使用 ObjectMapper 读入对象。它看起来像这样:

private final ObjectMapper mapper = new ObjectMapper();

Report<? extends BaseLog> toReport(String json) throws IOException {
        return mapper.readValue(json, Report.class);
}

同时,IDEA 发誓要参数化,他们说,Unchecked Assignment也就是说,它希望我Report完全是<? extends BaseLog>.

这是我理解它不起作用的方式:

Report<? extends BaseLog> toReport(String json) throws IOException {
        return mapper.readValue(json, Report<? extends BaseLog>.class);
}

对象映射时如何参数化?

java
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5