我有以下会话作用域bean:
@ManagedBean
@Component
@Scope(proxyMode= ScopedProxyMode.TARGET_CLASS, value="session")
public class SessionData implements Serializable {}
Run Code Online (Sandbox Code Playgroud)
我将tomcat会话存储在数据库中.问题是,当应用程序尝试反序列化存储的会话时,我收到以下错误:
org.apache.catalina.session.PersistentManagerBase.swapIn Error deserializing Session EE913D2ACAD49EB55EDA657A54DFA2CB: {1}
java.lang.ClassNotFoundException: de.myproject.SessionData$$EnhancerBySpringCGLIB$$768b59b9
Run Code Online (Sandbox Code Playgroud)
它似乎实际上序列化了整个Spring上下文,显然de.myproject.SessionData$$EnhancerBySpringCGLIB$$768b59b9在服务器重启后没有这样的类,所以我收到了上述异常.
有没有办法避免这种情况,以便会话范围的bean正确序列化?
更新:有一个问题关于这个标记为没有评论的解决,但我仍然面对它.
假设我们有一个名为的实体MyEntity.可以使用@Query和使用命名查询来查询可分页结果,例如
@Query(value = "select e from MyEntity e where e.enabled = true")
Page<MyEntity> findAllEnabled(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
但是,使用本机查询不可能实现相同的功能,所以这一点
@Query(value = "select * from my_entity where enabled = true", nativeQuery = true)
Page<MyEntity> findAllEnabled(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
不行.
这背后的原因是什么?是否可以使Pageable使用本机查询?
我已经开始大量使用Koltin并且在代码格式化方面苦苦挣扎.
虽然有一个官方的编码约定指南,但我想知道是否有任何可以获取/导入和使用的IntelliJ的公共可用样式指南设置(例如google codestyle for Java)?
我有一个在两个EC2实例中运行的REST API应用程序,并且长时间使用AWS Classic Load Balancer.REST API的客户端依赖于响应头(例如Location).
我知道HTTP标头根据定义不区分大小写,但是(不幸的是)一些客户端忽略了这一点,并以区分大小写的方式检查标头(例如,他们希望Location以大写字母开头).
最近我改为AWS Application Load Balancer,现在我发现它将所有响应头转换为小写,因此客户端无法正确处理响应.
我在这里有几个问题.
我如何获得可以设置的请求/响应?此外,在此方法的最后,我如何才能重定向到另一个页面?
@RequestMapping(value = "/dosomething", method = RequestMethod.GET)
public RETURNREDIRECTOBJ dosomething() throws IOException {
....
return returnredirectpagejsp;
}
Run Code Online (Sandbox Code Playgroud) 我知道有很多关于废弃连接的主题,但是我无法弄清楚我的问题是什么,所以我真的希望得到一些帮助.
我有一个带有Spring的Java应用程序,它从外部服务中获取一些数据,并尝试将其保存在数据库中.
我有JDBC池的以下配置
<bean id="dataSource"
class="org.apache.tomcat.jdbc.pool.DataSource"
p:initialSize="2"
p:minIdle="10"
p:maxIdle="50"
p:maxActive="100"
p:maxWait="15000"
p:jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
p:removeAbandoned="true"
p:removeAbandonedTimeout="60"
p:logAbandoned="true"
p:testOnBorrow="true"
p:testOnReturn="true"
p:testWhileIdle="true"
p:useEquals="false"
p:fairQueue="false"
p:timeBetweenEvictionRunsMillis="300000"
p:minEvictableIdleTimeMillis="300000"
p:validationInterval="10000"
p:validationQuery="SELECT 1">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是一个典型的Spring env,在我的服务中我有一个以下的方法
@Autowired
private TransactionalWrapper wrapper;
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void reconcileAllEvents(Date from, Date to) {
for (Event event : eventService.reconcile(from, to)) {
transactionalWrapper.reconcile(event);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的 TransactionalWrapper
@Service
public class TransactionalWrapperImpl implements TransactionalWrapper {
@Autowired
private EventRepository eventRepository;
@Transactional(propagation = …Run Code Online (Sandbox Code Playgroud) 我在Kotlin中有以下功能
fun evaluate(first:Int?, second:Int?) {
var result = 0
if (v.equals('*')) {
result = (first ?: 0) * (second ?: 0)
} else if (v.equals('+')) {
result = (first ?: 0) + (second ?: 0)
} else if (v.equals('-')) {
result = (first ?: 0) - (second ?: 0)
} else if (v.equals('/')) {
result = (first ?: 0) / (second ?: 0)
}
return result
}
Run Code Online (Sandbox Code Playgroud)
我想以某种方式更改它,以便我可以作为第三个参数传递所需的运算符并评估表达式.就像是
fun evaluate(first:Int?, second:Int?, op: () -> Unit):Int {
return (first ?: 0).op(second …Run Code Online (Sandbox Code Playgroud) 我有基于Spring的应用程序,并使用编程方法(AbstractAnnotationConfigDispatcherServletInitializer)进行应用程序配置.
为了使tomcat会话复制工作,我需要使用tag 标记'app distributable,但是正如我所提到的,我正在使用编程风格,例如<distributable/>web.xml
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
String activeProfile = activeProfile();
if (isNotEmpty(activeProfile)) {
servletContext.setInitParameter("spring.profiles.active", activeProfile);
}
super.onStartup(servletContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于如何使用Spring配置的文档,所以我的问题是,是否可以在没有web.xml的情况下拥有可分发的应用程序?我无法将所有配置移动到web.xml,所以任何帮助都表示赞赏.
我有以下字符串:"05 X 02".我怎么能把它转换成日期?我不想将其转换为字符串"05 10 02"然后到目前为止.可能吗?
感谢帮助.
到目前为止,我正在尝试使用
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd M/L yy");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.也尝试使用DateTimeFormatterBuilder,但在这里我完全迷失了.
在定义谓词或函数时,我曾经将它们创建为static final
private static final Predicate<SomeDto> SOME_PREDICATE =
new Predicate<SomeDto>() {
@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我注意到,enum例如,版本也有很多用途
private enum SomePredicate implements Predicate<SomeDto> {
INSTANCE;
@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道枚举与静态最终主题,但是使用枚举对谓词或函数的静态最终是否有任何真正的优势?
我一直在使用ReadWriteLock来实现/维护锁定习语.
自JDK8 StampedLock推出以来.由于RWLocks以其缓慢和糟糕的性能而闻名,因此StampedLock看起来像是另一种选择(它们不是可重入的,速度更快).
然而,除了性能之外,我认为StampedLock的维护和使用更加困难和复杂 - 例如线程现在可以自行解锁 - 因此应采取相应的措施.
StampedLock比RWLock有什么好处?
java ×8
spring ×5
java-8 ×2
kotlin ×2
session ×2
spring-mvc ×2
amazon-ec2 ×1
amazon-elb ×1
enums ×1
guava ×1
hibernate ×1
http-headers ×1
jdbc ×1
postgresql ×1
predicate ×1
tomcat ×1
xml ×1