澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

第十八篇,图片服务器FastDFS

来源:http://www.bhtsgq.com 作者:计算机知识 人气:145 发布时间:2019-05-30
摘要:1.  上学布署 一、Activemq整合spring的运用场景 新蒲京赌场官方网站,二、增多商品同步索引库 3、商品详细情况页面动态体现 4、呈现实际情况页面使用缓存     我们早已落到实处了商

1. 上学布署

一、Activemq整合spring的运用场景

新蒲京赌场官方网站,二、增多商品同步索引库

3、商品详细情况页面动态体现

4、呈现实际情况页面使用缓存

 

 

我们早已落到实处了商品详细的情况页面包车型地铁呈现,不过有贰个主题素材大家要考虑的是:因为查询商品实际情况的时候要提到到数据库,如若大家网页的访问量比相当的大的时候,查询商品都去查数据库的话,数据库的压力是非常大的。为了消除这几个标题标话大家要引进缓存;但是引进缓存的话又要思量3个主题材料,缓存的财富也是轻易的。假若大家把大气商品实际情况音信都放到缓存的话,缓存的下压力也相当的大。大家知道商品是分紧俏商品和冷门商品的,紧俏访问量极大,因而累积热销商品音讯能力拉长缓存的利用率。那么什么样缓和那一个主题素材吗,有以下三种方案:一.选择redis的的访问量计算效能并利用其zset数据类型实行访问量排序,把访问量高的货色详细情况内容加多到缓存其中。这种方案比较辛勤,我们不建议使用这种格局。2.设置缓存的逾期时间,用户如若点击查阅商品详细的情况,大家无不先都存放到缓存当中,但是我们要设置一下该条商品的缓存时间(举例半天或一天或别的),到期后该商品的缓存就能被去除掉,若是该商品是走俏商品的话,用户再查看详细情形的时候就又会向缓存中增加该商品的缓存,假诺该商品是冷门商品,过期后缓存中便未有那款商品的缓存消息了(直到有下壹位用户查看该商品的详细情形音讯),那样就能够节约缓存的空间,而且这种措施的确是增加缓存利用率最简便易行的方式了。那么大家如何在缓存中保留大家的消息呢?redis有三种存款和储蓄情势,一种是哈希,一种是字符串;前者适合消息分类存款和储蓄,但不合乎安装缓存的晚点时间,因为它不扶助到具体到对各个菲尔德举行安装过期时间,那就表示借使我们设置的key过期后,缓存的音信都会消退,那鲜明是不客观的,我们想要的是本着每一种商品设置过期时间,因而设置过期时间来讲,hash存款和储蓄不合适。String存款和储蓄是相比吻合的,那么难题又来了,String存款和储蓄时key是轻便重新的,怎么来幸免key争论呢?我们得以因而增多前缀、后缀的办法对redis的key进行归类,如下图所示。既然是要存款和储蓄商品详细情况,就在货品ID后边起个名字,就叫做ITEM_INFO,在ID的后面增加后缀BASE,DESC(代表是商品描述音信)即:ITEM_INFO:123456:BASEITEM_INFO:123456:DESC

1. 学习计划

1、图片上传

a) 图片服务器法斯特DFS

b) 图片上传成效完结

贰、富文本编辑器的使用Kind艾德itor

三、商品增加效果实现

 

一、spring整合JDBC

2. Activemq整合spring

新蒲京赌场官方网站 1image.png

2. 图形服务器的装置

一、存款和储蓄空间可扩张。

二、提供三个合并的访问格局。

 

第十八篇,图片服务器FastDFS。运用法斯特DFS,布满式文件系统。存款和储蓄空间能够横向扩充,能够兑现服务器的高可用。匡助每一个节点有备份机。

 

  一.spring提供了不胜枚举模板整合Dao才能

  新蒲京赌场官方网站 2

2.一. 用到方法

首先步:引用相关的jar包。

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>

 

第二步:配置Activemq整合spring。配置ConnectionFactory

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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-4.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">


    <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://192.168.25.168:61616" />
    </bean>
    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    <bean id="connectionFactory"
        class="org.springframework.jms.connection.SingleConnectionFactory">
        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
        <property name="targetConnectionFactory" ref="targetConnectionFactory" />
    </bean>
</beans>

 

其三步:配置生产者。

使用JMSTemplate对象。发送信息。

第四步:在spring容器中配备Destination。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

    <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://192.168.25.168:61616" />
    </bean>
    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    <bean id="connectionFactory"
        class="org.springframework.jms.connection.SingleConnectionFactory">
        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
        <property name="targetConnectionFactory" ref="targetConnectionFactory" />
    </bean>
    <!-- 配置生产者 -->
    <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>
    <!--这个是队列目的地,点对点的 -->
    <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg>
            <value>spring-queue</value>
        </constructor-arg>
    </bean>
    <!--这个是主题目的地,一对多的 -->
    <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="topic" />
    </bean>
</beans>

 

第5步:代码测试 

@Test
    public void testSpringActiveMq() throws Exception {
        //初始化spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
        //从spring容器中获得JmsTemplate对象
        JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
        //从spring容器中取Destination对象
        Destination destination = (Destination) applicationContext.getBean("queueDestination");
        //使用JmsTemplate对象发送消息。
        jmsTemplate.send(destination, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                //创建一个消息对象并返回
                TextMessage textMessage = session.createTextMessage("spring activemq queue message");
                return textMessage;
            }
        });
    }

 

二.二. 代码测试 

比方把2维表保存到redis中:1、表名正是率先层二、主键是第3层叁、字段名第壹回三层使用“:”分隔作为key,value正是字段中的内容。

2.1. 什么是FastDFS?

法斯特DFS是用c语言编写的1款开源的遍及式文件系统。法斯特DFS为网络量身定制,充裕思索了冗余备份、负载均衡、线性扩大体积等编写制定,并尊重高可用、高品质等指标,使用法斯特DFS很轻便搭建1套高品质的文本服务器集群提供文件上传、下载等服务。

 

  二.spring中提供了一个方可操作数据库的对象.对象封装了jdbc技能.

   JDBCTemplate => JDBC模板对象

   与DBUtils中的QueryRunner特别相似.

        //0 准备连接池
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql:///xieyupeng");
        dataSource.setUser("root");
        dataSource.setPassword("1234");
        //1 创建JDBC模板对象
        JdbcTemplate jt = new JdbcTemplate();
        jt.setDataSource(dataSource);
        //2 书写sql,并执行
        String sql = "insert into t_user values(null,'rose') ";
        jt.update(sql);

二.贰.一. 出殡和埋葬音信

首先步:早先化一个spring容器

第叁步:从容器中收获JMSTemplate对象。

其三步:从容器中拿到二个Destination对象

第六步:使用JMSTemplate对象发送音讯,供给了然Destination

@Test
    public void testQueueProducer() throws Exception {
        // 第一步:初始化一个spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
        // 第二步:从容器中获得JMSTemplate对象。
        JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
        // 第三步:从容器中获得一个Destination对象
        Queue queue = (Queue) applicationContext.getBean("queueDestination");
        // 第四步:使用JMSTemplate对象发送消息,需要知道Destination
        jmsTemplate.send(queue, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                TextMessage textMessage = session.createTextMessage("spring activemq test");
                return textMessage;
            }
        });
    }

 

贰.贰.2. 收下音讯 

e三-search-Service中接收新闻。

第2步:把Activemq相关的jar包增加到工程中

其次步:创立三个MessageListener的兑现类。

@Test
    public void testQueueProducer() throws Exception {
        // 第一步:初始化一个spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
        // 第二步:从容器中获得JMSTemplate对象。
        JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
        // 第三步:从容器中获得一个Destination对象
        Queue queue = (Queue) applicationContext.getBean("queueDestination");
        // 第四步:使用JMSTemplate对象发送消息,需要知道Destination
        jmsTemplate.send(queue, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                TextMessage textMessage = session.createTextMessage("spring activemq test");
                return textMessage;
            }
        });
    }

 

第三步:配置spring和Activemq整合。

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

    <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://192.168.25.168:61616" />
    </bean>
    <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
    <bean id="connectionFactory"
        class="org.springframework.jms.connection.SingleConnectionFactory">
        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
        <property name="targetConnectionFactory" ref="targetConnectionFactory" />
    </bean>
    <!--这个是队列目的地,点对点的 -->
    <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg>
            <value>spring-queue</value>
        </constructor-arg>
    </bean>
    <!--这个是主题目的地,一对多的 -->
    <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="topic" />
    </bean>
    <!-- 接收消息 -->
    <!-- 配置监听器 -->
    <bean id="myMessageListener" class="cn.e3mall.search.listener.MyMessageListener" />
    <!-- 消息监听容器 -->
    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="queueDestination" />
        <property name="messageListener" ref="myMessageListener" />
    </bean>
</beans>

 

 

 

第伍步:测试代码。

@Test
    public void testQueueConsumer() throws Exception {
        //初始化spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
        //等待
        System.in.read();
    }

 

3. 加上商品同步索引库 

我们一般把缓存加到service层中,因为Controller层使用的话有料定的局限性。将缓存加到service层的话,就算是别的工程引用这一个服务的话也能选用缓存的遵从上边是促成的步调:第一步:在taotao-manager-service中加多重视

2.2. FastDFS架构

法斯特DFS架构包罗 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调治最后由Storage server达成文件上传和下载。

Tracker server作用是负载均衡和调治,通过Tracker server在文书上传时可以依赖部分政策找到Storage server提供文件上传服务。能够将tracker称为追踪服务器或调治服务器。

Storage server功能是文本存款和储蓄,客户端上传的文书最终存款和储蓄在Storage服务器上,Storage server未有完毕自个儿的文件系统而是选用操作系统 的文件系统来管理文件。能够将storage称为存款和储蓄服务器。

 新蒲京赌场官方网站 3

 

 

服务端多少个角色:

Tracker:管理集群,tracker也得以兑现集群。每一种tracker节点地位平等。

征集Storage集群的动静。

Storage:实际保存文件

Storage分为多少个组,种种组之间保存的文本是见仁见智的。各个组内部能够有八个分子,组成员内部保存的内容是一样的,组成员的地位是同样的,未有基本的概念。

 

  三.整合步骤

3.1. Producer

e三-manager-server工程中发送信息。

当商品增进完毕后发送二个TextMessage,包蕴二个物品id。

 新蒲京赌场官方网站 4

新蒲京赌场官方网站 5

@Override
    public e3Result addItem(TbItem item, String desc) {
        // 1、生成商品id
        final long itemId = IDUtils.genItemId();
        // 2、补全TbItem对象的属性
        item.setId(itemId);
        //商品状态,1-正常,2-下架,3-删除
        item.setStatus((byte) 1);
        Date date = new Date();
        item.setCreated(date);
        item.setUpdated(date);
        // 3、向商品表插入数据
        itemMapper.insert(item);
        // 4、创建一个TbItemDesc对象
        TbItemDesc itemDesc = new TbItemDesc();
        // 5、补全TbItemDesc的属性
        itemDesc.setItemId(itemId);
        itemDesc.setItemDesc(desc);
        itemDesc.setCreated(date);
        itemDesc.setUpdated(date);
        // 6、向商品描述表插入数据
        itemDescMapper.insert(itemDesc);
        //发送一个商品添加消息
        jmsTemplate.send(topicDestination, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                TextMessage textMessage = session.createTextMessage(itemId   "");
                return textMessage;
            }
        });
        // 7、e3Result.ok()
        return e3Result.ok();
    }

 

3.2. Consumer 

新蒲京赌场官方网站 6

2.叁. 文书上传的流程

 新蒲京赌场官方网站 7

 

客户端上传文件后存款和储蓄服务器将文件ID重回给客户端,此文件ID用于未来访问该文件的目录音信。文件索引消息蕴含:组名,虚拟磁盘路线,数据两级目录,文件名。

 新蒲京赌场官方网站 8

 

 

n 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器再次回到,供给客户端自行保留。

n 虚拟磁盘路线:storage配置的虚构路线,与磁盘选项store_path*对应。如若安插了store_path0则是M00,假使安排了store_path1则是M0一,依此类推。

n 数据两级目录:storage服务器在各样虚拟磁盘路线下创办的两级目录,用于存款和储蓄数据文件。

n 文件名:与公事上传时不一致。是由存款和储蓄服务器依照特定音讯更改,文件名包涵:源贮存服务器IP地址、文件成立时间戳、文件大小、随机数和文件拓展名等音信。

 

   3.1 导包

   4 2:4代表:新蒲京赌场官方网站 9

   2代表:com.springsource.org.apache.commons.logging-壹.一.一.jar、com.springsource.org.apache.log四j-一.2.壹伍.jar(老版本要导入的,导入能够确定保证一定能运维)

   spring-test、spring-aop、junit4类库

   c3p0连接池、JDBC驱动

   spring-jdbc、spring-tx事务

三.二.一. 功效解析

1、接收音信。要求创制MessageListener接口的贯彻类。

2、取消息,取商品id。

三、根据货色id查询数据库。

4、创建一SolrInputDocument对象。

5、使用SolrServer对象写入索引库。

6、再次回到成功,再次来到e3Result。

 

其次步:将taotao-content-service中的jedis的代码复制一份

二.4. 文件下载

 新蒲京赌场官方网站 10

 

 

   叁.贰 计划数据库(四个字段id(自增进)和name就可以)

3.2.2. Dao层

据书上说货色id查询商品消息。

 新蒲京赌场官方网站 11

 

炫丽文件:

<select id="getItemById" parameterType="long" resultType="cn.e3mall.common.pojo.SearchItem">
        SELECT
            a.id,
            a.title,
            a.sell_point,
            a.price,
            a.image,
            b. NAME category_name,
            c.item_desc
        FROM
            tb_item a
        JOIN tb_item_cat b ON a.cid = b.id
        JOIN tb_item_desc c ON a.id = c.item_id
        WHERE a.status = 1
          AND a.id=#{itemId}
    </select>

 

3.2.3. Service层 

参数:商品ID

业务逻辑:

1、依照商品id查询商品音讯。

2、创建一SolrInputDocument对象。

三、使用SolrServer对象写入索引库。

4、再次回到成功,重回e三Result。

返回值:e3Result

public e3Result addDocument(long itemId) throws Exception {
        // 1、根据商品id查询商品信息。
        SearchItem searchItem = searchItemMapper.getItemById(itemId);
        // 2、创建一SolrInputDocument对象。
        SolrInputDocument document = new SolrInputDocument();
        // 3、使用SolrServer对象写入索引库。
        document.addField("id", searchItem.getId());
        document.addField("item_title", searchItem.getTitle());
        document.addField("item_sell_point", searchItem.getSell_point());
        document.addField("item_price", searchItem.getPrice());
        document.addField("item_image", searchItem.getImage());
        document.addField("item_category_name", searchItem.getCategory_name());
        document.addField("item_desc", searchItem.getItem_desc());
        // 5、向索引库中添加文档。
        solrServer.add(document);
        solrServer.commit();
        // 4、返回成功,返回e3Result。
        return e3Result.ok();
    }

 

3.2.4. Listener 

public class ItemChangeListener implements MessageListener {

    @Autowired
    private SearchItemServiceImpl searchItemServiceImpl;

    @Override
    public void onMessage(Message message) {
        try {
            TextMessage textMessage = null;
            Long itemId = null; 
            //取商品id
            if (message instanceof TextMessage) {
                textMessage = (TextMessage) message;
                itemId = Long.parseLong(textMessage.getText());
            }
            //向索引库添加文档
            searchItemServiceImpl.addDocument(itemId);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

三.二.伍. Spring配置监听 

 新蒲京赌场官方网站 12

 

 

新蒲京赌场官方网站 13image.png第二步:将配置文件复制进去新蒲京赌场官方网站 14image.png第五步:配置resource.properties从上边的剖判大家清楚大家能够因而抬高缓存前缀来分化key的安顿,那些key大家能够灵活一点,还会有过期时间也是。因而大家在resource.properties中配备新蒲京赌场官方网站 15image.png

②.伍. 最简易的法斯特DFS架构

 新蒲京赌场官方网站 16

 

 

   3.3 书写Dao

//使用JDBC模板实现增删改查
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
    @Override
    public void save(User u) {
        String sql = "insert into t_user values(null,?) ";
        super.getJdbcTemplate().update(sql, u.getName());
    }
    @Override
    public void delete(Integer id) {
        String sql = "delete from t_user where id = ? ";
        super.getJdbcTemplate().update(sql,id);
    }
    @Override
    public void update(User u) {
        String sql = "update  t_user set name = ? where id=? ";
        super.getJdbcTemplate().update(sql, u.getName(),u.getId());
    }
    @Override
    public User getById(Integer id) {
        String sql = "select * from t_user where id = ? ";
        return super.getJdbcTemplate().queryForObject(sql,new RowMapper<User>(){
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                return u;
            }}, id);

    }
    @Override
    public int getTotalCount() {
        String sql = "select count(*) from t_user  ";
        Integer count = super.getJdbcTemplate().queryForObject(sql, Integer.class);
        return count;
    }

    @Override
    public List<User> getAll() {
        String sql = "select * from t_user  ";
        List<User> list = super.getJdbcTemplate().query(sql, new RowMapper<User>(){
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                return u;
            }});
        return list;
    }
}

三.二.6. 贯彻流程

 新蒲京赌场官方网站 17

 

第陆步:在代码中加多缓存

3. 图形服务器安装格局

   3.4 spring配置

   依赖关系

<!-- 1.将连接池放入spring容器 -->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property>
    <property name="driverClass" value="${jdbc.driverClass}" ></property>
    <property name="user" value="${jdbc.user}" ></property>
    <property name="password" value="${jdbc.password}" ></property>
</bean>


<!-- 2.将JDBCTemplate放入spring容器 -->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <property name="dataSource" ref="dataSource" ></property>
</bean>

<!-- 3.将UserDao放入spring容器 -->
<bean name="userDao" class="cn.itcast.a_jdbctemplate.UserDaoImpl" >
    <!-- <property name="jt" ref="jdbcTemplate" ></property> -->
    <property name="dataSource" ref="dataSource" ></property>
</bean>

4. 商品详细的情况页面突显

创制二个货品详细情况页面展现的工程。是一个表现层工程。

 

package com.taotao.service.impl;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import com.taotao.common.pojo.EasyUIDataGridResult;import com.taotao.common.pojo.TaotaoResult;import com.taotao.mapper.TbItemDescMapper;import com.taotao.mapper.TbItemMapper;import com.taotao.pojo.TbItem;import com.taotao.pojo.TbItemDesc;import com.taotao.pojo.TbItemExample;import com.taotao.service.ItemService;import com.taotao.service.jedis.JedisClient;import com.taotao.utils.IDUtils;import com.taotao.utils.JsonUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.jms.*;import java.util.Date;import java.util.List;/** * 商品管理 */@Servicepublic class ItemServiceImpl implements ItemService { @Autowired private TbItemMapper tbItemMapper; @Autowired private TbItemDescMapper itemDescMapper; @Autowired private JmsTemplate jmsTemplate; @Resource(name = "itemAddTopic") private Destination itemAddTopic; @Autowired private JedisClient jedisClient; @Value("${ITEM_INFO}") private String ITEM_INFO;//商品的前缀 @Value("${ITEM_EXPIRE}") private Integer ITEM_EXPIRE;//商品的后缀 @Override public TbItem getItemById(long itemId) { //查询缓存 try{ String json = jedisClient.get(ITEM_INFO   ":"  itemId   ":BASE"); if (StringUtils.isNotBlank { TbItem item = JsonUtils.jsonToPojo(json,TbItem.class); return item; } }catch(Exception e) { e.printStackTrace(); } TbItem item = tbItemMapper.selectByPrimaryKey; //如果在缓存中没有就添加进缓存 try{ //添加缓存 jedisClient.set(ITEM_INFO   ":"  itemId   ":BASE", JsonUtils.objectToJson; //设置过期时间 jedisClient.expire(ITEM_INFO   ":"  itemId   ":BASE",ITEM_EXPIRE); }catch(Exception e) { e.printStackTrace(); } return item; } @Override public TbItemDesc getDescById(long itemId) { //查询缓存 try{ String json = jedisClient.get(ITEM_INFO   ":"   itemId   ":DESC"); if(StringUtils.isNotBlank { TbItemDesc desc = JsonUtils.jsonToPojo(json,TbItemDesc.class); return desc; } }catch(Exception e) { } TbItemDesc desc = itemDescMapper.selectByPrimaryKey; //如果在缓存中没有就添加进缓存 try{ jedisClient.set(ITEM_INFO   ":"   itemId   ":DESC",JsonUtils.objectToJson; jedisClient.expire(ITEM_INFO   ":"   itemId   ":DESC",ITEM_EXPIRE); }catch(Exception e) { e.printStackTrace(); } return desc; } @Override public EasyUIDataGridResult getItemList(int page, int rows) { //1.在执行查询之前配置分页条件。使用PageHelper的静态方法 PageHelper.startPage(page,rows); //2.执行查询 TbItemExample tbItemExample = new TbItemExample(); List<TbItem> list = tbItemMapper.selectByExample(tbItemExample); //3.创建PageInfo对象 PageInfo<TbItem> pageInfo = new PageInfo<>; EasyUIDataGridResult result = new EasyUIDataGridResult(); //设置数目 result.setTotal(pageInfo.getTotal; //设置返回的数据 result.setRows; return result; } @Override public TaotaoResult addItem(TbItem item, String desc) { final long id = IDUtils.genItemId(); item.setId; item.setCreated(new Date; item.setUpdated(new Date; item.setStatus; tbItemMapper.insert; TbItemDesc itemDesc = new TbItemDesc(); itemDesc.setItemDesc; itemDesc.setCreated(new Date; itemDesc.setUpdated(new Date; itemDescMapper.insert; //使用ActiveMq发送消息 jmsTemplate.send(itemAddTopic,new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage textMessage = session.createTextMessage; return textMessage; } }); return TaotaoResult.ok(); } @Override public TbItem updateItem(long itemId) { return null; }}

三.一. 安装步骤

率先步:把图纸服务器解压缩。

 新蒲京赌场官方网站 18

 

其次步:把图片服务器增加到Vmware中。

其三步:Vmware的互联网布署。

 新蒲京赌场官方网站 19

 

第四步:开机

 新蒲京赌场官方网站 20

 

移动:互联网布局不产生变化。要利用图片服务器,须要保障互连网计划不改变。

复制:重新生成1块网卡mac地址是新鸿基土地资金财产方。

Ip地址:192.168.25.133

用户名root、itcast

密码:itcast

   3.5 测试

//演示JDBC模板
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
    @Resource(name="userDao")
    private UserDao ud;

    @Test
    public void fun2() throws Exception{
        User u = new User();
        u.setName("tom");
        ud.save(u);
    }
    @Test
    public void fun3() throws Exception{
        User u = new User();
        u.setId(2);
        u.setName("jack");
        ud.update(u);

    }

    @Test
    public void fun4() throws Exception{
        ud.delete(2);
    }

    @Test
    public void fun5() throws Exception{
        System.out.println(ud.getTotalCount());
    }

    @Test
    public void fun6() throws Exception{
        System.out.println(ud.getById(1));
    }

    @Test
    public void fun7() throws Exception{
        System.out.println(ud.getAll());
    }

}

本文由澳门新葡亰发布于计算机知识,转载请注明出处:第十八篇,图片服务器FastDFS

关键词: 缓存 详情 页面 JAVAEE xpj导航站

最火资讯