storm集成spring使用说明文档

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40294332/article/details/79849546

1. 集成思想

storm集成spring的总的思想,是在storm容器中加载spring容器,达到使用spring提供的各个控件的目的。

2. 集成步骤

下面以集成spring jpa mysql为实例(依赖管理通过MAVEN方式管理),来讲解集成过程

2.1 引入pom依赖

 <!-- 对mysql的支持 -->
 <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-core</artifactId>
 </dependency>

 <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
 </dependency>

 <dependency>
     <groupId>com.mchange</groupId>
     <artifactId>c3p0</artifactId>
     <version>0.9.5.2</version>
 </dependency>

 <dependency>
     <groupId>org.springframework.data</groupId>
     <artifactId>spring-data-jpa</artifactId>
 </dependency>

 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
 </dependency>

2.2 引入spring配置文件 demo-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">

    <!-- 开启定时任务 -->
    <task:annotation-driven />

    <context:component-scan base-package="com.xxx.*" />

    <!--属性文件位置-->
    <context:property-placeholder location="classpath:config-spring.properties"/>

    <!--使用spring JPA 配置 start-->
    <bean id="dataSource"
          class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${datasource.username}"></property>
        <property name="password" value="${datasource.password}"></property>
        <property name="driverClass" value="${datasource.driver-class-name}"></property>
        <property name="jdbcUrl" value="${datasource.url}"></property>
    </bean>

    <!-- 配置 JPA 的 EntityManagerFactory  -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"></property><!-- 添加数据源 -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>
        <property name="packagesToScan" value="com.xxx.*"></property>
        <!-- hibernate 配置 -->
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
                <prop key="hibernate.show_sql">${jpa.show-sql}</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.dialect">${jpa.database-platform}</prop>
            </props>
        </property>
    </bean>

    <!-- 配置事务 纯事物  jpa事物 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"></property>
    </bean>

    <!-- dao包-->
    <jpa:repositories base-package="com.xxx.repository" repository-impl-postfix="Impl" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
</beans>

2.3 属性文件 config-spring.properties

##########################################
#######spring集成相关配置###################
#########################################
#mysql配置
datasource.driver-class-name=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://192.168.1.2:3306/demo?useSSL=false
datasource.username=root
datasource.password=123456
jpa.database-platform=org.hibernate.dialect.MySQLDialect
jpa.show-sql=true

2.4 仓库类

/**
 * 测试仓库类
 * @author [email protected];
 * @create 2018-03-23 9:30
 **/
@Repository
public interface DemoRepository extends PagingAndSortingRepository<Demo, String> {


    /**
     * 获取Demo
     * @param status  0删除 1正常
     */
    List<Demo> findByStatus(int status);

}

2.5 初始化spring容器

在storm的每个bolt ,prepare方法总进行初始化spring context容器,从而达到使用spring控件的目的。

public class SpringTestBolt extends BaseBasicBolt {

    private final static Logger logger = LoggerFactory.getLogger(SpringTestBolt.class);

    protected ConfigurableApplicationContext applicationContext;

    @Override
    public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {

    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {

    }

    @Override
    public void prepare(Map stormConf, TopologyContext context) {
        super.prepare(stormConf, context);

        try {
            if (applicationContext == null) {
                applicationContext = new ClassPathXmlApplicationContext("/demo-spring.xml");
            }
            logger.info("{}",applicationContext);

        }catch (Exception e){
            logger.error("初始化配置信息失败,{}", e.getMessage());
        }
    }
}

2.6 打包

打包需要将所有依赖都打入jar包,提交到storm集群,在pom中引入打包属性。

<build>
                <finalName>storm-test</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-shade-plugin</artifactId>
                        <version>2.3</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>shade</goal>
                                </goals>
                                <configuration>
                                    <finalName>${project.name}-${version}</finalName>
                                    <transformers>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                            <resource>META-INF/spring.handlers</resource>
                                        </transformer>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                            <resource>META-INF/spring.schemas</resource>
                                        </transformer>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                            <resource>META-INF/spring.provides</resource>
                                        </transformer>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                            <resource>META-INF/spring.factories</resource>
                                        </transformer>
                                    </transformers>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>

猜你喜欢

转载自blog.csdn.net/weixin_40294332/article/details/79849546