由于公司使用的框架版本比较久,需要将现有的框架进行升级。项目使用最新版本的struts/spring/hibernate,并使用最新版本的jdk 1.7和最新的tomcat 7。
在项目的classpath中加入spring的最新版本3.2相关的jar包,并且安装好jdk 1.7,配置好相关的环境变量。配置好tomcat 7相关参数(比如tomcat的目录路径,jdk等),发布并运行项目,结果出现了异常,这个异常最后的一句是这样的:
error at ::0 can't find referenced pointcut xxx
在网上查了很久的资料,才发现是由于jdk版本过高,导致以前项目中的一些jar包不能使用,具体的jar包是aspectjrt.jar和aspectjweaver.jar。AspectJ是一个面向切面的框架,AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
解决办法:
1. 将jdk版本由1.7换成1.6,但是由于组内的需求,此方案不合适
2. 将两个jar包换成最新的包
在http://www.eclipse.org/aspectj/downloads.php 中下载最新版本aspectj-1.7.2.jar,并将此jar包用zip解压就可以得到最新版的aspectjrt.jar和aspectjweaver.jar,最后将这两个包与项目中的久版本的包进行替换,将新版的jar包加入classpath中。
The memcache sonsists of 2 parts: the server MemCached and the client MemCache.
- MemCached is the cache server, the same as Mysqld (mysql server), which save and feed cache to clients.
- MemCache is a client. With php, we need to install it as a mod, just the same as pdo_mysql (php_pdo_mysql.dll on windows).
- Download memcached from http://code.jellycan.com/memcached/ (get the win32 binary version). Here we suppose you extract the memcached in d:\memcached\.
- If you are on Sindows Vista/7, rightclick on memcached.exe and select Properties; click on the Compatibility tab. At the bottom you’ll see Privilege Level, check “Run this program as an administrator”.
- Open the command line by Win + R (or Start -> All Programs -> Accessories -> Command Prompt), and then run: d:\memcached\memcached.exe -d install to install the service.
- Still in the command line, run d:\memcached\memcached.exe -d start, or net start "memcached Server" to start the service.
- Check whether the service is running. Open Windows Task Manager, go to Services tab, you should find status of “memcached server” is “Running”.
- Download memcache. Win 32 bit version: http://downloads.php.net/pierre/ and 64 bit version:http://www.anindya.com/php-5-3-3-x64-64-bit-for-windows/ (choose Memcache 2.2.6 VC9 x64 Thread Safe).
- Extract memcache to you WAMP php ext folder, for example: D:\wamp\bin\php\php5.3.4\ext.
- Edit your php.ini file by adding: extension=php_memcache.dll.
- Restart apache server.
- Check php_info(); and you will find a module “memcache”.
-
To change MemCached memory size (default is 64mb), go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server in your registry, find the ImagePath entry and change it to:
“C:\memcached\memcached.exe” -d runservice -m 512 - More details see: memcached -help
- Previous Entry: java client with multi entry
- Next Entry: .htaccess rewrite to redirect non-www to www
一、知识点
你的应用程序可能需要从不同位置(例如文件系统、classpath或者URL)读取外部资源(如文本文件、XML文件、属性文件或者图像文件)。通常你必须要处理用于从不同位置加载资源的不同API。
Spring的资源装载器提供统一的getResource()方法,按照资源路径读取外部资源。你可以为路径指定不同的前缀来从不同的位置加载资源。为了从文件系统加载资源,使用file前缀。从classpath加载资源则使用classpath前缀,还可以在资源路径中指定一个URL。
Resource是Spring中代表外部资源的通用接口。Spring为Resource接口提供多个实现。资源装载器的getResource()方法根据资源路径决定实例化哪一个Resource实现。
二、代码示例
BannerLoader类
package com.codeproject.jackie.springrecipesnote.springadvancedioc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; /** * 在应用启动时显示banner.txt中的内容 * 因为加载banner.txt需要访问一个资源加载器,必须实现ResourceLoaderAware接口(或者ApplicationContextAware接口) * @author jackie * */ public class BannerLoader implements ResourceLoaderAware { private ResourceLoader resourceLoader; @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } public void showBanner() throws IOException { // banner.txt位于文件系统中,所以前缀为file Resource resource = resourceLoader.getResource("file:banner.txt"); InputStream inputStream = resource.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); while (true) { String line = bufferedReader.readLine(); if (line == null) { break; } System.out.println(line); } bufferedReader.close(); } }Bean配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- 指定init-method为showBanner,启动时就可以显示banner.txt的内容 --> <bean id="bannerLoader" class="com.codeproject.jackie.springrecipesnote.springadvancedioc.BannerLoader" init-method="showBanner"/> </beans>测试类
package com.codeproject.jackie.springrecipesnote.springadvancedioc; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author jackie * */ public class BannerLoaderTest { @Test public void testBannerLoader() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); BannerLoader bannerLoader = (BannerLoader) applicationContext.getBean("bannerLoader"); System.out.println(bannerLoader); } }(1)资源前缀
上面指定了文件系统的相对路径中的一个资源。也可以指定绝对路径。
file:c:/shop/banner.txt
当你的资源位于classpath中时,必须使用classpath前缀。如果没有路径信息存在,资源将从classpath的根位置加载。
classpath:banner.txt
如果资源位于一个特定的包里,可以指定从classpath根开始的绝对路径。
classpath:com/apress/springrecipes/shop/banner.txt
除了文件系统路径和classpath之外,还可以指定一个URL加载资源
http://springrecipes.apress.com/shop/banner.txt
如果资源路径中没有前缀,这个资源将根据应用上下文从一个位置加载。对于FileSystemXmlApplicationContext,资源将从文件系统加载。对于ClassPathXmlApplicationContext, 将从classpath加载。
(2)注入资源
除了调用getResource()方法显示地加载资源之外,还可以使用setter方法注入资源
public class BannerLoader { private Resource banner; public void setBanner(Resource banner) { this.banner = banner; } public void showBanner() throws IOException { InputStream inputStream = banner.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); while (true) { String line = bufferedReader.readLine(); if (line == null) { break; } System.out.println(line); } bufferedReader.close(); } }然后在Bean配置中,可以简单指定Resource属性的资源路径。Spring将使用预先注册的属性编辑器ResourceEditor将这个资源路径转换为一个Resource对象,然后注入Bean中。
<bean id="bannerLoader" class="com.codeproject.jackie.springrecipesnote.springadvancedioc.BannerLoader" init-method="showBanner"> <property name="banner"> <value>classpath:banner.txt</value> </property> </bean>