小编chz*_*gla的帖子

在Junit测试中使用来自WEB-INF的i18n资源

我想我的类路径设置遇到了错误.

我想测试一个国际化的网络应用程序,其中的messagesource定义如下:

<bean id="messageSource"
  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/i18n/errors</value>
            <value>/WEB-INF/i18n/messages</value>
            <value>/WEB-INF/i18n/links</value>
            <value>/WEB-INF/i18n/forms</value>
            <value>/WEB-INF/i18n/communication</value>
        </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

加载这些值在生产环境中完美运行.但是,在运行Junit Test时,它无法解析这些属性文件,因为它们不在类路径中.

但是,我希望它们不在类路径上,因为我可以利用我可以在属性文件中更改内容的功能,并立即反映在网站上: Since application servers typically cache all files loaded from the classpath, it is necessary to store resources somewhere else (for example, in the "WEB-INF" directory of a web app). Otherwise changes of files in the classpath will not be reflected in the application.

spring applicationContext位于那里:/src/main/resources/spring/applicationContext.xml 并使用这些注释加载到Junit测试中:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"})
Run Code Online (Sandbox Code Playgroud)

如何让Junit获取那些非类路径资源呢?属性文件已打开/src/main/webapp/WEB-INF/i18n/*

Junit:4.7.

春天:3.0.5.

junit spring classpath

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

使用Hibernate Annotations注释EnumMap <K,V>

只是一个简单的问题:

我想在我的一个实体类中使用EnumMap.

有没有一种特殊的方法来注释这些?如果我没有明确地注释它会发生什么?

更具体:我希望Key作为String值而不是int值持久化.

干杯

java spring annotations hibernate

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

定义具有继承权限的用户角色

我目前正在研究 spring-security 框架 - 到目前为止很棒的东西,给人留下了深刻的印象。但是,我还没有找到在哪里或如何定义权限继承。

例如,我希望 ROLE_ADMIN 至少具有与 ROLE_USER 相同的权限。我为 spring 定义了三个拦截网址:

 <intercept-url pattern="/auth/login.do" access="permitAll"/>
 <intercept-url pattern="/voting/*" access="hasRole('ROLE_USER')"/>
 <intercept-url pattern="/admin/*" access="hasRole('ROLE_ADMIN')"/>
Run Code Online (Sandbox Code Playgroud)

当我以 ROLE_ADMIN 用户身份登录时,尝试访问从 /voting/ 嵌套的任何站点时,我被拒绝了。我在这里错过了什么吗?我知道,我可以为 /voting/* 分支定义多个角色,但是如果我想象在我的一个现实用例中可能有 10 个不同的用户角色,我可以想象 .xml 文件变得非常混乱,真的快速地。

我可以在某处配置角色的继承吗?

干杯

编辑:

感谢伟大的社区和他们的投入,我想出了一个可行的解决方案 - 它可能是好的风格与否 - 它有效:D

我定义了一个枚举,它反映了继承的 spring-sec 角色:

public enum UserRoles {
     ROLE_USER(new String[]{"ROLE_USER"}),
     ROLE_ADMIN(new String[]{"ROLE_USER", "ROLE_ADMIN"});
     private final String[] roles;

     private UserRoles(String[] roles) {
          this.roles = roles;
     }

     public String[] getRoles() {
          return roles;
     }
}
Run Code Online (Sandbox Code Playgroud)

然后我实现了我自己的 UserDetailsS​​ervice:

在方法内

@Override
public UserDetails loadUserByUsername(String username) …
Run Code Online (Sandbox Code Playgroud)

spring rights spring-security security-roles

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

在Hiberate Criteria API中查询enum的方法

我有一个映射到它@Entity@Enumerated字段:

@Entity
@Table
public class Device implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    @Enumerated(EnumType.STRING)
    private DeviceType typeOfDevice;

    [....]

}
Run Code Online (Sandbox Code Playgroud)

DeviceType 是典型的java 5枚举:

public enum DeviceType {
  MOBILE(true), EMAIL(false);
  private final boolean fubar;

  private DeviceType(boolean fubar) {
    this.fubar= fubar;
  }

  public boolean isFubar() {
    return fubar;
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何查询Device具有typeOfDevice.isFubar() == true哪些实体?

return factory.getCurrentSession().createCriteria(Device.class).
       add(Restrictions.eq("typeOfDevice.isFubar", true)).list();
Run Code Online (Sandbox Code Playgroud)

是不是做这个工作:

return factory.getCurrentSession().createCriteria(Device.class).
       createCriteria("typeOfDevice").add(Restrictions.eq("fubar", true)).list();
Run Code Online (Sandbox Code Playgroud)

enums spring hibernate

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

Java Collections - Effienct搜索DateTime范围

我有一个案例,我有一个表(t1),其中包含像

 | id | timestamp | att1 | att2 |
Run Code Online (Sandbox Code Playgroud)

现在我必须迭代att1类型的元素集合,并从t1获取所有来自此att1的两个特定时间戳之间的记录.对于单个att1,我必须多次执行此操作.

因此,为了简化数据库查询,我打算将具有某个att1属性的t1中的每个条目加载到一个集合中,然后对该集合执行后续搜索.

是否有可以处理"2011-02-06 09:00:00"和"2011-02-06 09:00:30"之间搜索的集合?不保证包含这两个时间戳的条目.

在为此编写实现之前(很可能是一个非常慢的实现^^)我想问你们,是否已经有一些现有的集合或者我如何解决这个问题.

谢谢!

java collections

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

停止无限循环Runnable从ThreadPool运行

我有一个Runnable实现类,它将从Executors.newFixedThreadPool Inside 运行Runnable,我有一个无限循环运行,它在UDP端口上侦听传入数据.

我想优雅地结束Runnable以关闭所述UDP端口.

我怎样才能做到这一点?Thread直接扩展时,我可以访问interrupt()和isInterupted()等,我可以在其中建立无限循环.

Runnable然而,在实施课中,我想做类似的事情

@Override
public void run() {
    while (active) {

    }
}
Run Code Online (Sandbox Code Playgroud)

并有

private boolean active = true;
Run Code Online (Sandbox Code Playgroud)

ThreadPool终止后如何设置active = false?

java multithreading threadpool

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