我试图用可选的替换下面的代码块,只是想检查这样做会有什么不好的影响,如性能或其他任何东西?
现有代码:
UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
userObj.setResult(result.toString());
}
Run Code Online (Sandbox Code Playgroud)
使用Java 8 Optional:
UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));
Run Code Online (Sandbox Code Playgroud)
执行此更改只是为了使代码看起来简洁,因为我的代码中有很多空检查块.
我正在实现spring批处理作业,使用分区方法处理数据库表中的数百万条记录,如下所示 -
从分区器中的表中获取唯一的分区代码,并在执行上下文中设置相同的分区代码.
使用阅读器,处理器和编写器创建一个块步骤,以根据特定的分区代码处理记录.
这种方法是正确的还是有更好的方法来处理这种情况?由于某些分区代码可以具有比其他分区代码更多的记录,因此具有更多记录的那些可能比具有较少记录的分区代码花费更多时间来处理.
是否有可能创建分区/线程来处理如thread1进程1-1000,thread2进程1001-2000等?
如何控制创建的线程数,因为分区代码可以在100左右,我想在5次迭代中只创建20个线程和进程?
如果一个分区失败会发生什么,所有处理都会停止并恢复?
以下是配置 -
<bean id="MyPartitioner" class="com.MyPartitioner" />
<bean id="itemProcessor" class="com.MyProcessor" scope="step" />
<bean id="itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step" >
<property name="dataSource" ref="dataSource"/>
<property name="sql" value="select * from mytable WHERE code = '#{stepExecutionContext[code]}' "/>
<property name="rowMapper">
<bean class="com.MyRowMapper" scope="step"/>
</property>
</bean>
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
<property name="corePoolSize" value="20"/>
<property name="maxPoolSize" value="20"/>
<property name="allowCoreThreadTimeOut" value="true"/>
</bean>
<batch:step id="Step1" xmlns="http://www.springframework.org/schema/batch">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="200"/>
</batch:tasklet>
</batch:step>
<batch:job id="myjob">
<batch:step id="mystep">
<batch:partition step="Step1" partitioner="MyPartitioner">
<batch:handler grid-size="20" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下模式通过 XSD 模式验证来验证 XML 元素,但它不起作用。所需的行为是允许除模式表达式中提到的字符之外的所有字符。
<xsd:pattern value="^[^><{}|^`\[\]\\\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
Run Code Online (Sandbox Code Playgroud)
但上面的模式也在 XSD 中给出了有效数据(测试)的验证错误,但如果我在 java 正则表达式匹配包中使用此模式,同样可以正常工作。请帮忙。
我试图在我的应用程序中利用 Spring Boot 3.x 中的 Observability API 进行跟踪和指标,但我对如何获取正确的可跟踪性和指标详细信息的必要设置感到困惑。
我创建了一个示例 Spring Boot 应用程序用于测试。
我在pom.xml中添加了这些依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-datadog</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
应用程序.yml:
spring:
application:
name: datadog-sample
server:
port: 8090
management:
metrics:
distribution:
percentiles-histogram:
http:
server:
requests: true
endpoint:
health:
cache:
time-to-live: 6s
show-details: always
metrics:
enabled: true
endpoints:
web:
exposure:
include: health,info,metrics
health:
jmx:
metrics:
export:
enabled: true
step: 1m
info:
env: …Run Code Online (Sandbox Code Playgroud) java ×3
spring ×2
datadog ×1
java-8 ×1
java-stream ×1
lambda ×1
optional ×1
regex ×1
spring-batch ×1
spring-boot ×1
xml ×1
xsd ×1