文档章节

项目总结:定时给微博用户的最新微博回复

程序猿_哲
 程序猿_哲
发布于 2014/06/07 14:14
字数 1860
阅读 3308
收藏 12

    来到新单位才4天,跟原来的国企就是不一样,各种开发都要求快速健壮,写完需求都要跑测试用例,虽然比在国企累多了,但是每天都能学到新东西,反正年轻,不用图找个轻松的工作。

    刚来就有个小需求,写个定时任务,每天读取一个文件,里面是新浪微博用户的uid,把这些uid存到数据库。还有个定时任务是从数据库中取出uid,根据uid检查用户发出的第一条微博内容的mid,给这条微博做回复。

    需求很明了,一条路就顺下来,没什么很难得,但是实际操作就遇上很多问题。

    首先没有依托的项目,需要自己新建,这样很多功能的比如数据库映射层还要重新写,比较麻烦。新建项目前先了解下功能,首先读取文件肯定没问题,存到数据库也不难,先研究获取用户mid和给微博评论功能。

    先看了看微博的api::open.weibo.com。找到对应的api接口

    

    因为是到新单位,稍微有点着急,想赶紧弄出来,由于我自己申请过一个新浪微博开发者账号,有token,所以这2个需要的功能大概看了看就开始用httpclient写对应的功能,后来问了下同事才知道有现成的weibo4j的包文件,直接调用里面对应功能行。而且也不用token,使用cookies就行

        Timeline tm = new Timeline();
        JSONObject status = null;
        status = tm.getUserTimelineIdsByUid(uid);
        JSONArray statuses = null;
        statuses = (JSONArray) status.get("statuses");
        mid = statuses.get(0).toString();

 

        Comments cm = new Comments();
        cm.client.setCookie(cookie);

    第一天就光跟这个微博的接口较劲了,其实如果早点问问同事,没准很快就能出来

    后面就是写关于数据库映射层的相关功能,之前我一直使用ibatis,这边的项目用的jdbcTemplate,本来为了项目的统一,我说我也用jdbcTemplate吧,各种问题啊,可能也是由于我着急的关系,弄了一下午也没出来,主要问题就是log日志和我这边的spring包有冲突,最后还是用回去ibatis,10几分钟就搞定了,当然就是个简单使用,没有进行过封装

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="xxxx"/>
        <property name="username" value="xxx"/>
        <property name="password" value="xxx"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="10"/>
        <property name="minIdle" value="20"/>
    </bean> 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->
        <!--<property  name="configLocation"  value="classpath:sqlMapConfig.xml"/>-->
        <!--指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 -->
        <property name="mapperLocations" value="classpath*:MybatisMapper/*.xml"/>
    </bean>
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    <bean id="weiboTaskDao" class="com.wrm.task.dao.impl.WeiboTaskDaoImpl">
        <!--注入SqlSessionTemplate实例 -->
        <property name="sqlSession" ref="sqlSession"/>
        <!--也可直接注入SqlSessionFactory实例,二者都指定时,SqlSessionFactory失效 -->
        <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
     -->
    </bean>
public class WeiboTaskDaoImpl implements WeiboTaskDao {
    public SqlSessionTemplate sqlSession; 
    
    // 相关接口
    
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
}

用ibatis写了几个接口,批量插入,读取list,更新,每次给用户发的微博回复成功后会回写数据库标记下

第二天就这么过去了,数据库映射应该使用我最常用的,反正也是新项目,结果非要是用jdbcTemplate,耽误时间

大概功能已经完事了,后面还有很多收尾的功能,比如加上警报功能,如果出现严重错误需要发邮件,添加错误日志等信息,然后就是打包运行。。。。

打包运行又是一个比较麻烦的地方,之前一直都是写的web后端,没有用过这种java se的项目,打成jar包运行也没太了解,这边的项目有用ant脚本做发布的,看了一阵没太看明白,而且那个项目没有用spring,配置文件很少,我这边不行啊,spring 的配置文件和ibatis的sql映射文件都很多啊,试了试ant也没弄好,一上午又过去了

    这咋整,想了想我这边的项目使用的maven做管理,maven应该整合了ant功能,上网搜了搜maven打jar包,有点心得

    原文地址http://blog.csdn.net/c_4818/article/details/6700950

这里使用一个maven插件maven-shade-plugin     指定了main.class后就能打成jar包了,注意:这里打包后,你在项目中引入的jar包如spring等,会把这些jar包解压成class文件再统一打到你的项目里,运行jar的时候就不用再关心外部jar包的问题了

但是这里我还是出现了一个很郁闷的问题,因为weibo4j做过修改,并没有传到私服里,导致我在项目里只能这么调用

    <dependency>
        <groupId>com.loopj.xxx</groupId>
        <artifactId>xxx-async-http</artifactId>
        <version>1.3.2</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/xxx-async-http-1.3.2.jar</systemPath>
    </dependency>

这么做的结果就是打包的时候找不到这个jar文件,报错:

 

[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for xxx.http:xxx-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 2

最主要的就是这个报错信息

jar should not point at files within the project directory

这个问题可以看这里:http://stackoverflow.com/questions/3642023/having-a-3rd-party-jar-included-in-maven-shaded-jar-without-adding-it-to-local-r

给出了很好的答案,大概说下就是使用mvn install:install-file 把引入的外部jar导入到本地maven仓库中,再使用package就能打到一起了

发布第三方Jar到本地库中: 

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar 

 

总算了打成jar包了,该能运行了吧,结果还是错误,一个之前没有重视的问题,参看别的项目,关于Properties的配置是使用这样的方式

        String dir = System.getProperty("user.dir");
        System.setProperty("log.root",dir+"/log");
        System.setProperty("conf.path",dir+"/conf");

打成jar包运行的话就非常麻烦不管是spring的配置文件application还是properties文件都不能打到jar包里,而是在jar包同级目录生成conf目录,都放在了这里,但是我这边不行啊,所以还得改,最好是把这些配置文件都在jar文件中访问

原来这些Properties配置文件就不用String filePath的方式读取了,都使用URI的方式,这样就算这些配置打到了jar包里也能正确访问

    public static void init() throws IOException, URISyntaxException {
        PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
        properties.load(ClassLoader.getSystemResourceAsStream("config.properties"));
    }

既然都是使用的maven做管理,这些config.properties都是放在resources目录下的

 

这里再记录下resource的用法,就是把一些配置文件打到jar包里

        <resources>
            <resource>
                <targetPath>conf/</targetPath>
                <filtering>false</filtering>
                <directory>${basedir}/conf</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>

ibatis的配置刚才也给看了<property name="mapperLocations" value="classpath*:MybatisMapper/*.xml"/>

然后就能运行了,真是不容易,这是打出来的jar包

 

像什么net,org都是项目里引用的jar包,都给你解压成class了放进来了

© 著作权归作者所有

共有 人打赏支持
程序猿_哲
粉丝 6
博文 12
码字总数 9560
作品 0
东城
程序员
加载中

评论(3)

zhen2
zhen2
jar包导入本地库对我有用
coldboold
coldboold
79
许雷神
许雷神
谢谢分享,厉害
求教!关于微博的舆情分析

我大三菜鸟一枚,跟随老师做了个研究项目,叫“基于微博的派出所社区管理与舆情导向分析”,无奈目前头脑一片混乱。故在此求教,希望能尽快帮助,现将项目的部分呈现如下: (1) 构建面向微...

宇宙风
2014/07/19
914
10
JEESNS V1.2.0 正式版发布,Java 开源 SNS 社区系统

JEESNS V1.2.0 正式版已发布,JEESNS 是一款基于 JAVA 企业级平台研发的社交管理系统,依托企业级 JAVA 的高效、安全、稳定等优势,开创国内 JAVA 版开源 SNS 先河。数据库使用 MYSQL,全部源...

zchuanzhao
2017/10/31
869
0
政务微信门户建设思考

移动互联网的快速发展,给社会化媒体带来了很大的发展空间,具有代表性的就是微信和微博。作为目前移动互联网领域内用户数最大的两大平台,政府部门也开始借助其用户量大的基础来做服务。前期...

brwdylpwgy
2014/01/16
0
0
政务微信门户建设思考

移动互联网的快速发展,给社会化媒体带来了很大的发展空间,具有代表性的就是微信和微博。作为目前移动互联网领域内用户数最大的两大平台,政府部门也开始借助其用户量大的基础来做服务。前期...

sandykang
2014/01/16
1K
2
thinksns微博系统接口文档(转)

ThinkSNS开源微博系统,是智士的开源社交平台。采用PHP+MySQL技术平台,微博+应用的产品模式,同时拥有iphone、 android客户端、wap、3G版界面。通过应用、插件、风格包等丰富的扩展机制可以...

drewin
2014/05/22
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
33分钟前
0
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
1
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
4
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部