atomikos 所需jar :
1.transactions-jdbc.jar
2.transactions.jar
3.transactions-jta.jar
4.transactions-api.jar
5.atomikos-util.jar
jta.properties 配置文件 放在src目录即可
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
com.atomikos.icatch.console_file_name = tm.out
com.atomikos.icatch.log_base_name = tmlog
com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm
com.atomikos.icatch.console_log_level =INFO
spring配置文件
<!-- tomcat 数据源方式
<jee:jndi-lookup id="dataSource1" jndi-name="jdbc/t1"/>
<jee:jndi-lookup id="dataSource2" jndi-name="jdbc/t2"/>
-->
<!-- 读取数据库连接配置文件 -->
<bean id="propertyConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!-- 第一个数据库 -->
<bean id="dataSource1" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="mysql/product1" />
<property name="xaDataSourceClassName"
value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
<property name="xaProperties">
<props>
<prop key="user">${jdbc.username.a}</prop>
<prop key="password">${jdbc.password.a}</prop>
<prop key="URL">${jdbc.url.a}</prop>
</props>
</property>
<property name="testQuery">
<value>SELECT 1</value>
</property>
</bean>
<!-- 第二个数据库-->
<bean id="dataSource2" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="mysql/product2" />
<property name="xaDataSourceClassName"
value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
<property name="xaProperties">
<props>
<prop key="user">${jdbc.username.b}</prop>
<prop key="password">${jdbc.password.b}</prop>
<prop key="URL">${jdbc.url.b}</prop>
</props>
</property>
<property name="testQuery">
<value>SELECT 1</value>
</property>
</bean>
<!-- SessionFactory -->
<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
</bean>
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2" />
</bean>
<!--
spring管理atomikos
-->
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<description>UserTransactionManager</description>
<property name="forceShutdown">
<value>true</value>
</property>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="300" />
</bean>
<bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager"/>
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
<aop:aspectj-autoproxy />
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* secoo.server.impl.*.*(..))"
advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="springTransactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" read-only="true" />
<tx:method name="delete*" propagation="REQUIRED" read-only="true" />
<tx:method name="update*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" propagation="SUPPORTS" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<!—mapping 配置 并且指定 用哪个ssessio工厂 -->
<bean id="product1" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="secoo.mapper.Product1"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory1"></property>
</bean>
<bean id="product2" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="secoo.mapper.Product2"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory2"></property>
</bean>
DEBUG(DefaultListableBeanFactory.java:336)DefaultListableBeanFactory:336 - Ignoring bean class loading failure for bean 'atomikosTransactionManager'
org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.atomikos.icatch.jta.UserTransactionManager] for bean with name 'atomikosTransactionManager' defined in file [D:\tomcat-7\webapps\transcation\WEB-INF\classes\atomikos.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1330)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:396)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1282)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
... 17 more
Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 28 more
DEBUG(DefaultListableBeanFactory.java:336)DefaultListableBeanFactory:336 - Ignoring bean class loading failure for bean 'atomikosUserTransaction'
org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.atomikos.icatch.jta.UserTransactionImp] for bean with name 'atomikosUserTransaction' defined in file [D:\tomcat-7\webapps\transcation\WEB-INF\classes\atomikos.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
原因:缺少jta.jar 包。
转载:http://mxohy.blog.sohu.com/169635845.html常用redis操作命令:
常用redis操作命令:
1、手动抓取快照,save或者bgsave(后台异步)
redis> save
OK
redis> bgsave
Background saving started
2、获取某个key的类型
redis> type mylist
list
3、匹配所有符合模式的key,*代表所有
redis> keys *
1) "name"
2) "mylist"
4、随机返回一个key,
redis> randomkey
"mylist"
5、重命名一个key,
redis> rename name myname
OK
redis> keys *
1) "myname"
2) "mylist"
6、list的一些操作,
将一个值添加到列表的首部,
redis> rpush company taobao
(integer) 1
redis> lrange company 0 1
1) "taobao"
将一个值添加到列表的尾部,
redis> lpush company sina
(integer) 2
redis> lrange company 0 1
1) "sina"
2) "taobao"
获得列表长度,
redis> llen company
(integer) 2
返回list中某个范围的值,模式LRANGE key start end
redis> lrange company 1 2
1) "taobao"
2) "sohu"
只保留list中某个范围的值,模式LTRIM key start end
redis> lrange company 0 2
1) "sina"
2) "taobao"
3) "sohu"
redis> ltrim company 0 1
OK
redis> lrange company 0 2
1) "sina"
2) "taobao"
获得list中某个索引号的值,模式LINDEX key index
redis> lrange company 0 4
1) "baidu"
2) "sohu"
3) "sina"
4) "taobao"
redis> lindex company 2
"sina"
redis> lindex company 0
"baidu"
设置list中某个索引位置的值,模式LSET key index value
redis> lrange company 0 4
1) "baidu"
2) "sohu"
3) "sina"
4) "taobao"
redis> lset company 2 google
OK
redis> lrange company 0 4
1) "baidu"
2) "sohu"
3) "google"
4) "taobao"
用lpop获取list中索引最小的值(头部值),rpop获取list中索引最大的值(尾部值),注意获取之后list中就不再有这个值了。
redis> lrange company 0 4
1) "baidu"
2) "sohu"
3) "google"
4) "taobao"
redis> lpop company
"baidu"
redis> rpop company
"taobao"
redis> lrange company 0 4
1) "sohu"
2) "google"
特别注意:以上这些命令中的start或者index都是从0开始计算的
7、集合的一些操作
向集合中增加一个元素,模式SADD key member
redis> sadd class kongxing
(integer) 1
redis> type class
set
列出集合中的所有元素,注意元素是无序的,模式SMEMBERS key
redis> smembers class
1) "banqiao"
2) "rulong"
3) "changjie"
4) "kongxing"
从集合中删除一个元素,模式SREM key member
redis> srem class kongxing
(integer) 1
redis> smembers class
1) "banqiao"
2) "rulong"
3) "changjie"
返回集合大小,模式SCARD key
redis> scard class
(integer) 3
判断某个值是否在集合中,模式SISMEMBER key member
redis> sismember class kongxing
(integer) 0—表示没有’kongxing’这个元素
redis> sismember class rulong
(integer) 1—表示存在’rulong’这个元素
获取多个集合的交集元素,模式SINTER key1 key2 ... keyN
redis> smembers dba
1) "rulong"
2) "changjie"
redis> smembers class
1) "banqiao"
2) "rulong"
3) "kongxing"
4) "changjie"
redis> sinter class dba
1) "rulong"
2) "changjie"
redis> sinter dba class
1) "rulong"
2) "changjie"
---注意:取交集,所以与各个key的位置无关
转载:http://mxohy.blog.sohu.com/169631115.html
Redis是什么
Redis是REmote DIctionary Server的缩写,Redis is an open source, advanced key-value store
Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题(但持久化有一些问题,后面再说吧),redis的值可以是string(字符串)、hashes、list(列表)、sets(集合)或者是sorted sets(被排序的集合),(这是它最大的优势,其他nosql都只支持string),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力。
Redis 2.0增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM,这两个比较重要,后面会具体说)。
Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等。
对于redis的认识不同,使用场景也会不同,如果当做一个内存数据库,那可以用来替换mysql;如果当做一个可持久化的缓存或者data structure server,那可以用来保存一些频繁访问的数据,由于支持的类型比较多,所以可以替换如memcached的东西。(如果用key value存储则修改和删除比较麻烦,需要将全部数据读出再写入,用list就可以解决这个啦)
下面来看看Redis的安装配置,很简单的
Redis的官方网站:http://redis.io/,上面有相关的文档和最新版本的redis下载
我下载的redis安装文件:redis-2.2.1.tar.gz
解压:
$tar zxvf redis-2.2.1.tar.gz
$cd redis-2.2.1
$make
是的,redis只需要make就可以了,这之后会在src目录中产生几个可执行文件,redis-server,redis-cli,redis-benchmark,redis-check-aof,redis-check-dump
默认配置文件的位置:redis-2.2.1/redis.conf
为了方便可以将可执行文件的路径加到PATH里:
PATH=$PATH:$HOME/bin:/home/kongxing/redis-2.2.1/src
启动时如没有特殊说明将使用默认配置文件,也可以指定配置文件:
$redis-server redis.conf
查看监听的端口以及服务:
$netstat -an -t
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN
Redis server启动后,可以使用redis-cli登录客户端进行操作,当存在多个server时通过指定端口号-p和服务器-h来访问:
$redis-cli -p 6379
redis>
关闭redis:
$redis-cli -p 6380
redis> shutdown
查看redis有哪些key:
$redis-cli keys \*
或者
redis> keys *
查看redis状态情况:
$redis-cli info
或者
redis> info