分类: Java

junit spring单元测试方法不执行

发表于3年前(Apr 18, 2015 8:58:28 AM)  阅读 2604  评论 0

分类: Java 开发运维环境

标签: junit MultipleFailureException spring-test

1、背景

junit测试service方法,引入spring-test框架,使用注解初始化spring容器,junit测试类spring环境配置如下:

运行测试类时,java控制台无错误报出,junit报出MultipleFailureException,java控制台输出如下:

2015-04-18 08:30:26.716 DEBUG [SpringJUnit4ClassRunner.java:113] SpringJUnit4ClassRunner constructor called with [class com.***.service.TestSecurityService].
2015-04-18 08:30:26.732 DEBUG [BootstrapUtils.java:78] Instantiating TestContextBootstrapper from class [org.springframework.test.cont
......

Spring MVC Mapping重复定义

发表于3年前(Apr 17, 2015 8:46:59 PM)  阅读 1772  评论 0

分类: Java

标签: annotation spring mvc mapping AbstractHandlerMethodMapping registerHandlerMethod 映射覆盖

1、背景

用过Spring MVC的都清楚一点,controller中的url mapping是不能重复的,如果重复定义了url,在Spring容器初始化时,将会报出"Ambiguous mapping found. Cannot map ***  There is already **  mapped."的错误。追寻源码,mapping的建立可以追溯到spring-webmvc.jar包AbstractHandlerMethodMapping中的registerHandlerMethod方法:

	protected void registerHandlerMethod(Object handler, Method method, T mapping) {
		HandlerMethod newHandlerMethod = createHandlerMethod(handler, method);
		HandlerMe
......

配置error-page出错

发表于3年前(Apr 17, 2015 7:44:54 PM)  阅读 596  评论 0

分类: Java 开发运维环境

标签: error-page location 404

1、背景

web.xml配置了error-page,部署在tomcat时启动没有报错,部署在weblogic时启动报错,错误类似如下:

2015-4-17 下午05时22分10秒 GMT+08:00> <Error> <J2EE> <BEA-160197> <Unable to load descriptor /opt/weblogic/software3.5/casp/WEB-INF/web.xml of module casp. The error is weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND
  problem: cvc-datatype-valid.1.1: string value 'auth/problem.jsp' does not match pattern for war-pathType in namesp
......

跨域跳转相关问题

发表于3年前(Jan 27, 2015 10:29:58 AM)  阅读 708  评论 0

分类: Java 开发运维环境

标签: 跨域 forward nginx sendRedirect

1、背景:

昨天有同学碰到这么一个问题,有服务器A部署了系统A,有服务器B部署了系统B,A系统使用IFrame嵌入了B系统相关功能。因为网络权限控制得比较严格,用户暂时只有访问服务器A的权限,与服务器B的网络是不通的,所以用户访问系统A的时候,嵌入系统B的功能页面将是空白。后咨询得知,网络不通的情况只是暂时的,但还是想先通过其他手段能先进行常规的开发和测试。

2、分析:

首先,Iframe本身跨域是没有问题的,只要客户浏览器能正常访问B服务器即可。如果客户跟B服务器网络不通,那Iframe直接嵌入肯定是行不通的。

其次,如果使用转发跳转,在java里面有sendRedirect和forward两种,其中sendRedirect是浏览器转发,所以其实还是浏览器访问目标地址,而forward则是服务器转发,浏览器并不需要具有目标地址的访问权限,但forward不能跨域。

反向代理是唯一可

......

反射获取方法参数必须完全匹配

发表于3年前(Jan 26, 2015 10:35:19 AM)  阅读 1017  评论 0

分类: Java

标签: java反射 getMethod searchMethods 向上就近匹配 重载

java里面有个方法重载机制,重载的原则是向上就近匹配原则,而反过来向下匹配是不行的,我们只能强制转换。

本文稍微分析了一下源码,解释java反射获取方法是如何运作的。

反射获取方法参数必须完全匹配的,如果我们需要它执行向上就近匹配原则该怎么做,在使用java反射机制时需要注意什么。

Spring配置多数据源进行数据同步

发表于4年前(Jan 20, 2015 4:59:00 PM)  阅读 5290  评论 4

分类: Java 数据库 案例

标签: 数据同步 annotation 多数据源 多事务 动态切换 AOP 反射 模型转换 AbstractRoutingDataSource PlatformTransactionManager

本文主要可以解决以下几个问题:

Spring如何配置多数据源、多事务,以及如何动态切换。

Spring AOP机制的运用,以及对同一个切面(Joint Point)多个处理方法(Advice)执行顺序的设置,即AOP的Order的设定。

自定义注解Annotation的实现以及使用。

使用Java反射机制配合Annotation实现异构模型之间的自动转换。

网站配置的一种设计实现方法

发表于4年前(Jan 7, 2015 11:22:17 AM)  阅读 971  评论 0

分类: Java 案例

标签: 网站配置 annotation

1、网站配置:

一个网站都有很多配置选项,如笔者的博客里面就有基本配置、阅读配置、评论配置等:

有了这些配置管理功能,我们在开发时就不需要硬编码,可以实现在线修改配置选项,不需要重启服务。这是一个网站很常见的做法。

2、简单实现:

一般来说,实现这个配置管理很简单,建立一个配置实体类,映射数据库中的一个表,无非就是对这个实体实现增删改查。后期如果要修改,比如增加了一个配置选项,那就修改实体类,增加属性,增加数据库字段,修改页面,可能要修改对应的合法性验证。虽然修改的地方较多,但也没那么麻烦,都是简单的体力劳动,也没什么费劲的。

3、多个配置怎么办:

如果系统里面就一两个这样的配置,采用上面的方法很快就完成了,但如果系统中有很多这样的配置,那工作量就有点大了。这时我们就会偷下懒了,就要想到继承了,看看配置是不是基本都是相似的。而且,难道我们给每一个配置建立一个对应的映射表,每个表里n多字段只有一条数据,这样好像有点浪费。

 

java工程配置文件加密

发表于4年前(Jan 5, 2015 10:22:19 AM)  阅读 1228  评论 0

分类: Java 开发运维环境

标签: spring web.xml applicationContext.xml DES 加密解密 PropertyPlaceholderConfigurer

一个常见的java web工程中有许多配置文件,基本为两种类型文件,xml和properties,具体的有web.xml,applicationContext.xml,jdbc.properties,log4j.properties等。

假如,你的整个工程被某些人拿到了,会发生什么事。jdbc里面明文填写了数据库连接信息,数据库地址暴露了,用户名密码暴露了,当然,一般数据库都有防火墙等安全方面的限制,光有这些可能还不足以攻破你的数据库,但是泄露这些总是不好的,总是危险的。所以如果配置文件中包含敏感信息必须加密。

那如何加密这些配置文件呢:

Hibernate支持的HQL函数-HQL对Date类型数据的处理

发表于4年前(Dec 24, 2014 2:34:59 PM)  阅读 1342  评论 0

分类: Java

标签: hql CURRENT_DATE YEAR

1、问题背景:

有一个需求,统计网址访问量,需要分别统计昨天以及当月网址的访问数量。网址每次访问记录都已保存下来,访问时间使用日期时间类型,数据库是用的mysql,对应的字段类型是timestamp。其实这是一个很简单的sql,指定时间范围count一下就行了,本来系统框架使用的hibernate,也支持jdbc,但是考虑到还是保留数据库可移植性,还是使用hql来进行查询。

2、解决方案:

2.1、方案1:

以统计昨天的访问量为例,给定两个时间类型的参数,分别对应昨天零点以及今天零点的时间,采用between进行查询。(传参时,参数类型好像是用使用java.sql.Date,笔者未试验)

2.2、方案2:

网上搜索hibernate支持的函数,找到一些处理时间类型的函数,笔者就是采用该方案实现,看下面代码:

public int getLastDayVisitCount() {
......