当前位置:   article > 正文

日志业务从mysql数据库迁移到mongodb数据库_java 系统操作日志保存到mysql还是mongdb

java 系统操作日志保存到mysql还是mongdb

前言

这周开始就要优化自己主导的商城项目了,不得不说因为前期项目周期短,时间紧张,很多框架上的设计做的很粗糙啊。今天开始改造一下系统中的日志存储,日志这种边缘化的东西,和商城业务分开放是很好的做法,不然或多或少会影响mysql的主业务数据存储。

一、下载一个mongodb

我这里下载的最新版,本人风格就是喜新厌旧,况且技术本来就是新的更刺激。

mongodb下载地址:http://downloads.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgz

linux解压命令:

tar -zxvf tar -zxvf mongodb-linux-x86_64-4.0.5.tgz

在解压后的mongodb-linux-x86_64-4.0.5目录下创建两个文件夹conf、data和log:

  1. mkdir conf
  2. mkdir data
  3. mkdir log

在conf中创建一个启动用的配置文件mongod.yml,并且打开密码验证

  1. systemLog:
  2. destination: file
  3. path: "../log/mongod.log"
  4. logAppend: true
  5. security:
  6. authorization: enabled
  7. storage:
  8. dbPath: "../data"
  9. journal:
  10. enabled: true
  11. processManagement:
  12. fork: true
  13. net:
  14. bindIp: 172.26.175.201
  15. port: 27017

启动mongodb数据库

./mongod --config ../conf/mongod.yml

二、使用可视化工具创建可用的数据库

这里我推荐的Studio 3T,很好用的mongodb可是化工具。

下载地址:https://download.studio3t.com/studio-3t/windows/2018.6.1/studio-3t-x64.zip

连接配置如下:

创建新的数据库wmshop,创建一个表shop_wm_log,按照提示无脑下一步就可以了

设置用户,并且设置角色为root,这里要在admin库上设置

重新连接数据库,需要输入密码连接了

OK了,基本设置已经完成。

三、项目代码

最新版本的spring-data-mongdb需要jdk1.8以及spring5.1.3以上的版本,所以如果这两个依赖低于此版本则需要更新。

添加依赖:

  1. <spring.framework.version>5.1.3.RELEASE</spring.framework.version>
  2. <!-- other dependency elements omitted -->
  3. <dependency>
  4. <groupId>org.springframework.data</groupId>
  5. <artifactId>spring-data-mongodb</artifactId>
  6. <version>2.1.3.RELEASE</version>
  7. </dependency>

mongodb配置文件:

  1. mongodb.host=${mongodb.host}
  2. mongodb.username=${mongodb.username}
  3. mongodb.password=${mongodb.password}
  4. mongodb.database=${mongodb.database}
  5. mongodb.port=${mongodb.port}
  6. mongodb.cph=${mongodb.cph}
  7. mongodb.tatbfcm=${mongodb.tatbfcm}
  8. mongodb.mwt=${mongodb.mwt}
  9. mongodb.ska=${mongodb.ska}
  10. mongodb.st=${mongodb.st}
  11. mongodb.dbname=${mongodb.dbname}
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mongo="http://www.springframework.org/schema/data/mongo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
  6. <mongo:mongo-client id="mongoClient" host="${mongodb.host}" port="${mongodb.port}"
  7. credentials="${mongodb.username}:${mongodb.password}@${mongodb.database}">
  8. <mongo:client-options connections-per-host="${mongodb.cph}"
  9. threads-allowed-to-block-for-connection-multiplier="${mongodb.tatbfcm}"
  10. connect-timeout="${mongodb.ct}"
  11. max-wait-time="${mongodb.mwt}"
  12. socket-keep-alive="${mongodb.ska}"
  13. socket-timeout="${mongodb.st}"/>
  14. </mongo:mongo-client>
  15. <mongo:db-factory dbname="${mongodb.dbname}" mongo-ref="mongoClient"/>
  16. <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  17. <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
  18. </bean>
  19. <mongo:mapping-converter id="converter" />
  20. </beans>

mongodb model类:

  1. @Document(collection = "shop_wm_log")
  2. @Data
  3. @ToString
  4. public class WMLog extends BaseEntity implements Serializable {
  5. /**
  6. * 日志编号
  7. */
  8. @Id
  9. private String wlId;
  10. /**
  11. * 接口请求地址
  12. */
  13. private String wlRequestUrl;
  14. /**
  15. * 接口请求参数
  16. */
  17. private Map<String,Object> wlRequestParameters;
  18. /**
  19. * 接口响应
  20. */
  21. private Map<String,Object> wlResponse;
  22. /**
  23. * 备注
  24. */
  25. private String remarks;
  26. public void setWlRequestUrl(String wlRequestUrl){
  27. this.wlRequestUrl = wlRequestUrl;
  28. go(wlRequestUrl);
  29. }
  30. public void setWlRequestParameters(Map<String,Object> wlRequestParameters){
  31. this.wlRequestParameters=wlRequestParameters;
  32. go(wlRequestParameters);
  33. }
  34. /**
  35. * 位remarks赋值,主要加上动作key
  36. * @param args
  37. */
  38. private void go(Object args){
  39. if(args == null){
  40. return ;
  41. }
  42. Map<String,Object> result = null;
  43. if(args instanceof Map){
  44. result = (Map<String, Object>) args;
  45. String traceId = (String)result.get("traceId");
  46. String[] split = traceId.split("-");
  47. this.remarks = split[1];
  48. } else if(args instanceof String){
  49. String parameters = (String)args;
  50. parameters = parameters.substring(parameters.indexOf("?")+1, parameters.length());
  51. if(parameters.isEmpty()){
  52. return ;
  53. }
  54. Map<String, String[]> stringMap = RequestUtils.parseQueryString(parameters);
  55. for(Map.Entry<String,String[]> entry:stringMap.entrySet()){
  56. String key = entry.getKey();
  57. String[] values = entry.getValue();
  58. if("traceId".equals(key)){
  59. //解析动作
  60. String value = values[0];
  61. String[] split = value.split("-");
  62. String actionKey = split[1];
  63. this.remarks = actionKey;
  64. break;
  65. }
  66. }
  67. }
  68. }
  69. }

mongodb dao接口:

  1. public interface WMLogDao {
  2. List<WMLog> findByWMLogId(String wmLogId);
  3. WMLog findById(String wmLogId);
  4. void saveWMLog(WMLog wmLog);
  5. void updateWMLog(WMLog wmLog);
  6. WMLog findByWMLog(WMLog wmLog);
  7. }

mongodb daoimpl接口:

  1. @Repository
  2. public class WMLogDaoImpl implements WMLogDao {
  3. // @Resource
  4. // private WMLogMapper wmLogMapper;
  5. @Autowired
  6. private MongoTemplate mongoTemplate;
  7. @Override
  8. public List<WMLog> findByWMLogId(String wmLogId) {
  9. return null;
  10. }
  11. @Override
  12. public WMLog findById(String wmLogId) {
  13. return findById(wmLogId);
  14. }
  15. @Override
  16. public void saveWMLog(WMLog wmLog) {
  17. mongoTemplate.save(wmLog);
  18. }
  19. @Override
  20. public void updateWMLog(WMLog wmLog) {
  21. Query query = new Query();
  22. query.addCriteria(Criteria.where("_id").is(wmLog.getWlId()));
  23. Update update = new Update();
  24. update.set("remarks",wmLog.getRemarks());
  25. mongoTemplate.updateFirst(query,update,WMLog.class);
  26. }
  27. @Override
  28. public WMLog findByWMLog(WMLog wmLog) {
  29. return null;
  30. }
  31. }

业务调用部分(这里是在消息队列监听中调用,可以忽略):

  1. @Component
  2. public class WMLogQueueReceiver implements MessageListener {
  3. @Resource
  4. private WMLogDao wmLogDao;
  5. @Override
  6. public void onMessage(Message message) {
  7. ObjectMessage obj = (ObjectMessage) message;
  8. try {
  9. if (obj.getObject() instanceof WMLog) {
  10. WMLog wmLog = ((WMLog) obj.getObject());
  11. wmLog.setCreateTime(new Date().getTime());
  12. wmLogDao.saveWMLog(wmLog);
  13. }
  14. }catch (Exception e){
  15. e.printStackTrace();
  16. }
  17. }
  18. }

项目跑起来,然后请求几个接口,再去studio 3t工具中查看数据库,增加了日志,大功告成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/675599
推荐阅读
相关标签
  

闽ICP备14008679号