我正在使用 spring 应用程序,有时用于@PostConstruct代码和测试中的设置
看来注释将被排除在Java 11之外:
请注意,@PostConstruct 和 @PreDestroy 注释都是 Java EE 的一部分。由于 Java EE 已在 Java 9 中弃用并在 Java 11 中删除,我们必须添加额外的依赖项才能使用这些注释
文章建议全部替换@PostConstruct为afterPropertiesSet方法
我建议您将 @PostConstruct 注释的实现更改为实现 org.springframework.beans.factory.InitializingBean 接口。
我可以在所有情况下盲目更换它吗?还是有其他考虑?
编辑
正如 @JBNizet 所建议的,这可能不是必须或需要的,因为Spring文档建议相反
我们建议您不要使用 InitializingBean接口,因为它不必要地将代码耦合到 Spring。或者,我们建议使用@PostConstruct注释或指定POJO初始化方法。
编辑2
另一种选择是使用initMethod:
通过Java配置,可以使用@Bean的initMethod属性
Run Code Online (Sandbox Code Playgroud)@Bean(initMethod = "init") public BeanOne beanOne() { return new BeanOne(); }
我添加了两个请求登录以存储会话ID,另一个请求检查负载测试需要会话ID.我只将登录请求设置为一次,只需将其添加为仅限一次控制器的子项.但是当我通过添加大约100或200个线程测试它时,登录也运行了那么多时间.我想只运行启动线程的登录请求.可能吗?下面我添加了测试用例层次结构.
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
Run Code Online (Sandbox Code Playgroud) 我有一个 Spring Boot 2 应用程序,它有两个数据源。两个数据源都可以工作,但是我无法更改最大池大小等属性,我的更改没有生效。
我在 application.properties 文件中配置两个数据源;
spring.datasource.url=jdbc:sqlserver://server;databaseName=ProductionMetrics
spring.datasource.username=ProductionMeusernametricsUser
spring.datasource.password=password
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.hikari.maximum-pool-size=20
# Products
trwbi.datasource.url=jdbc:sqlserver://server;databaseName=TRWBI
trwbi.datasource.username=username
trwbi.datasource.password=password
trwbi.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
trwbi.datasource.hikari.maximum-pool-size=20
Run Code Online (Sandbox Code Playgroud)
然后,我像这样设置两个数据源;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "defaultEntityManagerFactory",
transactionManagerRef = "defaultTransactionManager",
basePackages = {
"com.domain.visualisation.shared.repository"
}
)
public class DefaultDbConfig {
@Primary
@Bean(name = "defaultDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource defaultDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "defaultEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean
entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("defaultDataSource") DataSource dataSource
) {
return builder
.dataSource(dataSource)
.packages("com.domain.visualisation.shared.entities")
.persistenceUnit("default")
.build();
}
@Primary
@Bean(name = "defaultTransactionManager")
public …Run Code Online (Sandbox Code Playgroud) 使用lombok @Data 时(添加EqualsAndHashCode)
它添加了canEqual方法
Run Code Online (Sandbox Code Playgroud)protected boolean canEqual(Object other) { return other instanceof Exercise; }
只调用一次:
Run Code Online (Sandbox Code Playgroud)if (!other.canEqual((Object)this)) return false;
我搜索并找到了有关访问级别的讨论
如果您在非 final 类中实现 equals 和 hashCode,我们能做的最安全的事情就是像我们一样添加 can equal。由于我们不添加任何字段,因此成本(尤其是在方法受到保护的情况下)很小。
但是为什么我们需要这个生成的方法呢?不能内联吗?
我正在尝试在 Eclipse 2020-09 下运行新的 Java 15 功能。
我已经安装了 OpenJDK 15 并将其设置在“已安装的 JRE”下:
尽管如此,我无法将此版本设置为编译器版本(仅到版本 14):
我究竟做错了什么?
我有弹簧应用程序(球衣2.6类和servlet).
我需要从泽西/非弹簧环境中获取Spring bean(s),
类似的问题建议在上下文的静态包装中获取上下文
public static ApplicationContext getContext() {
return context;
}
Run Code Online (Sandbox Code Playgroud)
如何确定上下文已加载或不为null?
如果我不能,我应该等待/检查,直到它加载弹簧上下文?
在从泽西上下文调用或从简单的HttpServlet代码调用bean的情况下
编辑
Jersey使用jersey-spring3依赖jar 工作正常,所以我的问题只是关于Servlets的Spring控件
编辑2
该应用程序正在加载不同于@entpnerd建议文章的弹簧
它注册了一个实现的Servlet WebApplicationInitializer
public class MyWebAppInitializer implements WebApplicationInitializer {
Run Code Online (Sandbox Code Playgroud)
但是也在DispatcherServletweb.xml中配置了
如何才能DispatcherServlet在Spring加载后加载?
因为我们在其init方法上添加了自动装配功能:
WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext())
.getAutowireCapableBeanFactory().autowireBean(this);
Run Code Online (Sandbox Code Playgroud)
在提供请求之前添加超时是最喜欢的解决方案还是在类加载中有一个可以处理它的调整?
编辑3
我有一个 Spring Boot 微服务,它使用 JDBCTemplate 通过 JDBC 连接连接到多个数据库:
@Bean(name = "mysqlJdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("mysqlDb") DataSource dsMySQL) {
return new JdbcTemplate(dsMySQL);
}
Run Code Online (Sandbox Code Playgroud)
我为每个数据库都有不同的模板,然后休息模板控制器根据请求中传递的参数选择要使用的正确模板。我阅读了文档,但不清楚:
Jmeter中RPS和TPS有什么区别?我想为每个目标 TPS 运行 Jmeter 脚本 5 分钟的启动时间:10、20 和 30。与 RPS 相同吗?
根据Quarkus 文档:
在 Quarkus 中,首选的数据源和连接池实现是 Agroal。
但是,我没有看到任何关于“Agroal”与众所周知的 JDBC 连接池实现“HikariCP”的评论或比较。
除了Quarkus 和 Agroal都来自RedHat之外,是什么让“Agroal”比“HikariCP”更好?
java ×6
jmeter ×3
spring ×3
hikaricp ×2
spring-boot ×2
autowired ×1
classloader ×1
eclipse ×1
equals ×1
java-11 ×1
java-15 ×1
jdbc ×1
jdbctemplate ×1
jmeter-4.0 ×1
jmeter-5.0 ×1
load-testing ×1
lombok ×1
performance ×1
quarkus ×1
servlets ×1
spring-bean ×1