当我遇到一些令人惊讶的数字时,我正在使用jmh 1.21 比较JDK 8和11的性能:
Java version: 1.8.0_192, vendor: Oracle Corporation
Benchmark Mode Cnt Score Error Units
MyBenchmark.emptyMethod avgt 25 0.362 ± 0.001 ns/op
Java version: 9.0.4, vendor: Oracle Corporation
Benchmark Mode Cnt Score Error Units
MyBenchmark.emptyMethod avgt 25 0.362 ± 0.001 ns/op
Java version: 10.0.2, vendor: Oracle Corporation
Benchmark Mode Cnt Score Error Units
MyBenchmark.emptyMethod avgt 25 0.723 ± 0.001 ns/op
Java version: 11.0.1, vendor: Oracle Corporation
Benchmark Mode Cnt Score Error Units
MyBenchmark.emptyMethod avgt 25 0.724 ± 0.002 …Run Code Online (Sandbox Code Playgroud) 当jdbcTemplate.batchUpdate(...)正在运行时,我可以看到DB行数逐渐增加(通过count(*)在表中运行),最初是2k然后是3k并且直到10k.2k和3k不是确切的数字有时我得到235然后4567.
我期待一次性提交10 k行(批量大小).根据我的理解,如果最初,我得到行计数0然后下一行计数应该是10k.我不希望逐个插入性能原因,这就是为什么使用批量更新功能,似乎它也不会一次性全部提交.
我想将数据(10k行)仅发送到DB服务器一次,用于我的批量大小.为此,我应该在配置中指定什么?
下面是我编写jdbcTemplate批量更新批量大小为10k的方式.
public void insertRows(...) {
...
jdbcTemplate.batchUpdate(query, new BatchPreparedStatementSetter(){
@Override public void
setValues(PreparedStatement ps, int i) throws SQLException {
...
}
@Override public int getBatchSize() {
if(data == null){
return 0;
}
return data.size();
}
});
}
Run Code Online (Sandbox Code Playgroud)
编辑:将@Transactional添加到isertRows方法仍然可以看到相同的行为.使用Transnational它会在10k行之后提交,但是当我看到count使用UR时(从mytable中选择count(*)与ur)它会显示逐渐更新的数据(2k 4k,直到10k).这意味着数据以块的形式进入服务器(可能是一个再见).我如何一次性发送所有内容.这个问题表明它是使用mysql中的rewriteBatchedStatements实现的,我们在DB2中也有类似的东西.
我正在使用DataSource实现com.ibm.db2.jcc.DB2BaseDataSource
我重新安装了netbean 11.1。现在,我正在尝试构建一个项目,但是出现以下错误输出:
无法运行程序“ cmd”(在目录“ C:\ projects \ open”中):格式错误的参数已嵌入引号:“ C:\ Program Files \ NetBeans-11.1 \ netbeans \ java \ maven \ bin \ mvn.cmd”
cd C:\projects\open; "JAVA_HOME=C:\\Program Files\\Java\\jdk-11.0.5" cmd /c "\"\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven\\bin\\mvn.cmd\" -DskipTests=true -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans-11.1\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 clean install\"" Cannot run program "cmd" (in directory "C:\projects\open"): Malformed argument has embedded quote: "C:\Program Files\NetBeans-11.1\netbeans\java\maven\bin\mvn.cmd" -DskipTests=true -Dmaven.ext.class.path="C:\Program Files\NetBeans-11.1\netbeans\java\maven-nblib\netbeans-eventspy.jar" -Dfile.encoding=UTF-8 clean install
Run Code Online (Sandbox Code Playgroud)
我之前用netbeans 11.1构建了这个项目,但是有了新的pc。然后重新安装,我确定上次尝试安装所有内容时都没有问题。
我正在将项目迁移到Java9中,在切换到新的Java版本后,测试开始失败,看来PowerMock正在尝试访问一些它无法访问的类。
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.973 sec <<< FAILURE! - in com.Test
initializationError(com.Test) Time elapsed: 0.007 sec <<< ERROR!
org.objenesis.ObjenesisException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org/powermock/core/classloader/MockClassLoader cannot access jdk/internal/reflect superclass jdk.internal.reflect.MagicAccessorImpl
Run Code Online (Sandbox Code Playgroud)
Maven-surefire-插件
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Test.groovy</include>
<include>**/*Spec.*</include>
</includes>
<forkMode>always</forkMode>
<argLine>--add-modules java.xml.bind</argLine>
<argLine>--add-modules java.activation</argLine>
<argLine>--add-opens=java.base/java.lang=ALL-UNNAMED --illegal-access=warn</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
powermock依赖
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
</exclusion> …Run Code Online (Sandbox Code Playgroud) 我最近在我的机器上安装了 Java(Java Runtime 1.8.121)。我需要设置 JAVA_HOME 并从安装它的 Java 文件夹中设置变量。
我在网上查看的所有地方都说 Java 文件夹应该位于 Program files (x86) 中,但是,却找不到它。它不在程序文件(x86)中,不在程序文件中。由于使用了软件中心,因此安装时我无法选择目的地。它简单地完成了安装。
有人可以帮我找到 Java 文件夹在哪里,以便我可以设置 JAVA_HOME 吗???!
log4j2 <= 2.14.1 发现严重安全漏洞(请参阅https://nvd.nist.gov/vuln/detail/CVE-2021-44228)。如何更新 Spring Boot 应用程序的 pom.xml 以确保 log4j2 的所有(递归)使用都使用版本 2.15.0?
我的 springboot 应用程序在 DEV 环境中运行良好,现在我想隔离 DEV 和 PROD 环境,以便它获取各自的代码。
我确实浏览了一些教程并获得了一些线索,但无法就如何分离出 PROD 部分得出结论。
这个应用程序基本上在从角度应用程序提交表单时向 gmail 发送电子邮件。这就是我到目前为止在 springboot 应用程序上所做的,以将其隔离。
我已经根据实际文件创建application-dev.properties并添加了两个单独的 gmail 帐户,一个用于 DEV,一个用于 PROD。并将配置文件添加到 POM.xmlapplication-prod.propertiesapplication.properties
有关如何从现有代码创建 PROD 环境的任何帮助都将非常有帮助。我对 springboot 以及如何针对不同环境进行分析还很陌生。
application.properties 文件(实际文件)是:
server.port=8084
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=test1@gmail.com
spring.mail.password=xxxxxxxxxxxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Run Code Online (Sandbox Code Playgroud)
新的 application-dev.properties 文件
server.port=8084
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=test1@gmail.com
spring.mail.password=xxxxxxxxxxxxxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.profiles.active=@activatedProperties@
Run Code Online (Sandbox Code Playgroud)
新的 application-prod.properties 文件
server.port=8085
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=test2@gmail.com
spring.mail.password=xxxxxxxxxxxxxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Run Code Online (Sandbox Code Playgroud)
POM.xml 文件
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
Run Code Online (Sandbox Code Playgroud)
主要的EmailClientHmwApplication.java文件如下: …
我的数据库空间不足,因此我对旧记录进行了备份。现在,我必须清除这些记录,并且我的参考列是“日期”。
我尝试使用标准方法:
DELETE FROM table WHERE date >= '2017-01-01' AND date <= '2017-12-31'
Run Code Online (Sandbox Code Playgroud)
但这显然要花费太多时间,因为要删除的行超过700万行。有没有办法加快速度?我试图划分成几个月甚至更小的块,但是在运行代码一段时间后,我与服务器断开了连接。
提前致谢。
编辑:
CREATE TABLE table (
id INT(11) NOT NULL AUTO_INCREMENT,
date DATE DEFAULT NULL,
# 18 more columns
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 29616055,
AVG_ROW_LENGTH = 317,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_general_ci;
Run Code Online (Sandbox Code Playgroud) 输入:“这个过程持续了好几年,对于聋孩子来说,一个月甚至两三年内,无数的项目和表达方式都是用最简单的日常交际方式,听力小孩子从这些不断轮换和模仿他的谈话中学习到的。在他家里听到的模拟是我的,并提出主题并唤起他自己想法的自发表达。”
CHUNK_SIZE: 200, (可以说它有 200 个字符长)。
输出:
[“这个过程持续了好几年,对于聋子来说,在一个月甚至两三年内,使用最简单的日常交际的无数项目和表达很少”,
“听到孩子从这些不断的轮换和模仿中学习,他在家里听到的对话模拟是我的,并提出话题并唤起他自己的自发表达”,
“想法。”]
我知道一种方法是计算长度并检查我是否打破了任何单词等等,但有人告诉我这是非常低效和不可取的..所以我在这里寻求帮助。
java ×4
maven ×2
spring-boot ×2
algorithm ×1
appv ×1
db2-9.7 ×1
email ×1
java-11 ×1
java-8 ×1
java-home ×1
javascript ×1
jdbctemplate ×1
jmh ×1
log4j ×1
log4j2 ×1
log4shell ×1
mysql ×1
netbeans-11 ×1
powermock ×1
powermockito ×1
security ×1
spring-jdbc ×1
sql ×1
windows ×1
windows-10 ×1