小编dpr*_*dpr的帖子

定制/扩展Spring对shiro的@Async支持

我正在使用 Spring 的@EnableAsync功能来异步执行方法。为了安全起见,我使用 Apache Shiro。在异步执行的代码中,我需要访问附加到触发异步调用的线程的 Shiro 主题。

Shiro 支持在不同线程中使用现有主题,方法是将主题与Callable要在不同线程上执行的主题相关联(请参阅此处):

Subject.associateWith(Callable)
Run Code Online (Sandbox Code Playgroud)

不幸的是我无法直接访问Callable这些东西,因为这些东西是由 Spring 封装的。我发现我需要扩展 SpringAnnotationAsyncExecutionInterceptor来将我的主题与创建的主题相关联Callable(这是简单的部分)。

现在的问题是如何让 Spring 使用我的自定义AnnotationAsyncExecutionInterceptor而不是默认的。默认值是在AsyncAnnotationAdvisor和中创建的AsyncAnnotationBeanPostProcessor。我当然也可以扩展这些类,但这只会转变为问题,因为我需要让 Spring 再次使用我的扩展类。

有什么办法可以实现我想要的吗?

我也可以添加一个新的自定义异步注释。但我认为这不会有太大帮助。


更新:AnnotationAsyncExecutionInterceptor实际上我需要定制的 发现是错误的。一次偶然的机会,我偶然发现org.apache.shiro.concurrent.SubjectAwareExecutorService它完全符合我的要求,并让我觉得我可以简单地提供一个自定义执行器,而不是自定义拦截器。详情请参阅我的回答。

java spring asynchronous shiro

2
推荐指数
1
解决办法
1967
查看次数

java.lang.UnsupportedOperationException(无法将arraylist添加到列表中)

我正在尝试添加ArrayListListgetSalesOrderitm()是Salesorder项目列表。

Criteria cr = session.createCriteria(SalesOrder.class);
cr.add(Restrictions.ge("date", new SimpleDateFormat("yyyy/MM/dd").parse(fdate)));
cr.add(Restrictions.le("date", new SimpleDateFormat("yyyy/MM/dd").parse(tdate)));
List<SalesOrder> orderList = cr.list();
List<SalesOrderItem> itemList = Collections.EMPTY_LIST;
double totalAmount = 0.00;
for (SalesOrder salesOrder : orderList) {
    itemList.addAll(salesOrder.getSalesorderyitm());
}
Run Code Online (Sandbox Code Playgroud)

下面您可以在Salesorder类中看到休眠映射

@OneToMany(targetEntity=SalesOrderItem.class,mappedBy="salesorder",fetch=FetchType.LAZY)
public List<SalesOrderItem> getSalesorderyitm() {
    return salesorderyitm;
}
public void setSalesorderyitm(List<SalesOrderItem> salesorderyitm) {
    this.salesorderyitm = salesorderyitm;
}
Run Code Online (Sandbox Code Playgroud)

在下面您可以看到salesOrderItem类中的休眠映射

@ManyToOne
@JoinColumn(name="SOI_SalesOrderId")
public SalesOrder getSalesorder() {
    return salesorder;
}
public void setSalesorder(SalesOrder salesorder) {
    this.salesorder = salesorder;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108) …
Run Code Online (Sandbox Code Playgroud)

java arraylist

1
推荐指数
1
解决办法
473
查看次数

将 List&lt;Keys&gt; 和 List&lt;Values&gt; 合并到 List&lt;Hashmap&lt;Key,Value&gt;&gt;

我有两个清单;

val keys: List<String> = listOf("key1", "key2", "key3"...)
val values: List<String> = listOf("value1", "value2", "value3"...)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它们合二为一List<Hashmap<Key,Value>>?喜欢;

println(List<Hashmap<Key,Value>>): [[key1 = value1], [key2 = value2], [key3 = value3]...

dictionary list kotlin collectors

1
推荐指数
1
解决办法
93
查看次数

解析日期字符串:一些格式正确的字符串返回错误

在尝试从字符串中检索星期几时,虽然字符串对应于预定义格式,但有时会发生错误.

下面是用于解析字符串和格式定义的函数:

val dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
def getDayOfWeek(date: String): Int = {
    val stringToParse = date.substring(0, 19)
    try {
      val now = Calendar.getInstance()
      now.setTime(dateFormat.parse(stringToParse))
      println("Correct time string: " + stringToParse)
      now.get(Calendar.DAY_OF_WEEK)
    } catch {
      case _: Throwable => println("Wrong time string: " + stringToParse)
        -1
    } 
}
Run Code Online (Sandbox Code Playgroud)

以下是成功/未成功解析的字符串的示例:

Correct time string: 2017-01-01 04:00:00
Wrong time string: 2017-05-04 15:00:00
Correct time string: 2017-01-01 04:00:00
Correct time string: 2017-06-13 07:00:00
Correct time string: 2017-05-04 15:00:00
Correct time string: 2017-01-01 04:00:00 …
Run Code Online (Sandbox Code Playgroud)

java scala

0
推荐指数
1
解决办法
47
查看次数

标签 统计

java ×3

arraylist ×1

asynchronous ×1

collectors ×1

dictionary ×1

kotlin ×1

list ×1

scala ×1

shiro ×1

spring ×1