Spring Boot日志管理

  categories:资料  author:

在研究spring boot访问mongodb中发现有大量日志信息输出于是到网络上搜索了一下, 发现下面介绍日志信息比较详细, 抄录如下

Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。

格式化日志

默认的日志输出如下:

1

2016-04-13 08:23:50.120 INFO 37397 — [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}

输出内容元素具体如下:

时间日期 — 精确到毫秒
日志级别 — ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符 … 阅读全文

spring boot访问mongodb方法2

  categories:资料  author:

前面已经通过spring boot完成了对mongodb的集群访问, 但是访问方法中应用的配置是固定, 详情参考: spring boot访问mongodb副本集方法1

这里我们将完善前面的程序, 变为一个使用的, 可用通过控制台或者参数文件进行设置的可用系统

一. spring boot中传参的方法

 1、自动化配置

spring Boot 对于开发人员最大的好处在于可以对 Spring 应用进行自动配置。Spring Boot 会根据应用中声明的第三方依赖来自动配置 Spring 框架,而不需要进行显式的声明。比如
当声明了对 HSQLDB 的依赖时,Spring Boot 会自动配置成使用 HSQLDB 进行数据库操作。

Spring Boot 推荐采用基于 Java 注解的配置方式,而不是传统的 XML。只需要在主配置 Java 类上添加“@EnableAutoConfiguration”注解就可以启用自动配置。Spring Boot 的自动配置
功能是没有侵入性的,只是作为一种基本的默认实现。开发人员可以通过定义其他 … 阅读全文

spring boot访问mongodb副本集方法1

  categories:资料  author:

前面介绍了mongodb集群安装方法, 主要是docker下安装副本集的, 然后介绍了spring 访问副本集的方法。

一. 准备工作

1. 您需要用docker 安装mongodb的副本集 集群, 参考: Docker部署一个MongoDB集群   通过这个您才有了可以操作的对象

2. 您需要看过前面的 spring 访问mongodb的文章, 这样您才能配置相关权限,和创建好数据库等, 请参考: spring访问mongodb集群

本文在最后会 给出相关代码

二. 遇到的问题

正常情况下在spring boot中配置 mongodb的链接可以用

spring.data.mongodb.uri=mongodb://localhost/test  方式
spring.data.mongodb.username=mytest03
spring.data.mongodb.password=password

通过上面的uri我们指定了 连接, 下面的是用户名和密码 但是这个方式紧急能指定一个 mongodb的服务器, 无法指定多个 经过搜索, 发现mongodb还有别的配置方式

下面是在    
阅读全文

spring访问mongodb集群

  categories:资料  author:

前面采用docker方式搭建了一个mongodb的集群, 今天采用spring boot方式访问这个集群

本文 参考 Spring Boot中使用MongoDB数据库   内容, 一步一步进行实现,

另外, 本文需要的 mongodb集群是前文搭建的 一个集群, 没有准备好的 可以参考: Docker部署一个MongoDB集群

一。 配置java访问mongodb程序的主机的hosts文件

在前面集群安装中,采用了域名配置3个节点,这样在java的程序的主机上要进行配置

或者这些域名是dns能够正确解析的, 否则就出现如下图的socket连接超时的情况

mongo集群需要各个节点dns或者hosts文件不一致造成连接超时

mongo集群需要各个节点dns或者hosts文件不一致造成连接超时

为了解决问题,我们配置了我们的hosts文件图

正确配置Java访问mongodbhosts文件配置

正确配置Java访问mongodbhosts文件配置

在windows下要用管理员身份进行操作, 否则无法保存

 二。 编写java代码访问集群

package cn.iigrowing.study.mongodb;

import java.util.ArrayList;
import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
阅读全文

采用docker镜像安装用浏览器访问mongodb副本集的方法

  categories:资料  author:

前文介绍了采用docker镜像的办法安装mongodb副本集的集群, 但是在使用Rockmongo进行管理时遇到点问题, 这里给出如何用docker安装一个镜像, 然后如何访问mongodb副本集的办法

关于Rockmongo 和他的传统安装方法参考:   MongoDB 管理工具: Rockmongo

本文采用docker的方法安装上述工具

一。 您需要准备好您的docker环境, 具体参考: Docker部署一个MongoDB集群

若是您没有虚拟机, 也可以参考前面的文章, 里面都有介绍, 尽管都很简陋,错误很多, 但是也应该能给您的参考。

二。 下载docker的镜像, 由于国内的网络条件, 因此您需要先下载相关镜像, 如是用了阿里的相关代理或者其他的加快方法就很好了, 否则您就像我一样, 先下载着, 然后去做别的事情, 估计开完会您回来, 也就下好了

下载命令如下:docker  pull   anapsix/rockmongo

 

三。 创建文件存储配置文件的目录

mkdir -p  /export/data/rockmongo     这里是我的安装目录, 您具体的要根据您的情况进行设置了。… 阅读全文

搭建高可用mongodb副本集系统及访问方法

  categories:资料  author:

前面采用docker方法搭建了一个mongodb的副本集的集群系统, 还算顺利, 可以参考:Docker部署一个MongoDB集群   

但是编写代码时发现, 程序要链接到主那个机器上,  但是对于副本集, 有的时候会发生主的切换问题, 因此原来的连接方法不太好用了, 经过在网络上搜索 发现下面的一篇文章中, 有了相关介绍, 在本文后面的部分。

遗留问题是, 在spring boot中如何使用还没解决, 后续若是解决在放到这里。

 

另外, 发现, 在前面的mongodb集群搭建时采用域名的方法设置主机, 但是在客户端程序运行的机器上没有设置合适的hosts文件造成域名解析问题, 然后连接不上的情况, 如下图:

mongo集群需要各个节点dns或者hosts文件一致

mongo集群需要各个节点dns或者hosts文件一致

最简单的解决办法   在各个机器上配置一致的 hosts文件, 但是这个办法在开发和测试环境还是可以的, 在生产环境, 强烈建议统一采用 内部dns的办法解决。

在上一篇文章《搭建高可用MongoDB集群(一)——配置MongoDB》 提到了几个问题还没有解决。

  • 主节点挂了能否自动切换连接?目前需要手工切换。
  • 主节点的读写压力过大如何解决?
  • 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?
  • 数据压力大到机器支撑不了的时候能否做到自动扩展?

这篇文章看完这些问题就可以搞定了。NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能。这篇文章主要介绍副本集阅读全文

Docker部署一个MongoDB集群

  categories:资料  author:

本文介绍在docker环境下安装mongodb的副本集 的集群方式, 后续还会进行java编程访问副本集, 以及如何管理这个集群的实验, 具体链接参考文档最后的链接

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。

MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。

既然称为NoSQL数据库,Mongo的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

但是,MongoDB也不是万能的,同MySQL等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。

较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;由于MongoDB的横向扩展能力,也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;由于MongoDB存储数据的弱类型,也可以用来存储一些多变json数据,如:与外系统交互时经常变化的JSON报文。而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储。

什么是docker

Docker是一个轻量级的虚拟机更容易理解。另外一种解释是:Docker就是操作系统中的chroot。如果你不知道chroot是什么的话,后一种解释可能无法帮助你理解什么是Docker。

chroot是一种操作,能改变当前运行的进程和子进程的根目录。 程序运行在这样的一个被修改的环境中,它不能访问这个环境目录树之外的文件和命令,这个被修改的环境就是“chroot牢笼”。

— Arch Linux 的 wiki 中对 chroot 的解释

具体的docker相关事项参考:  Docker入门指南    和      win7下DOCKER详细安装教程    

mongodb集群

mongodb支持很多中的集群方式, 本文主要是 集群复制的一种方式, 另外一个非常有用的就是分片也就是分区, 我们后面会研究。

集群复制

主从复制虽然可以承受一定的负载压力,但这种方式仍然是一个单点,如果主库挂了,数据写入就成了风险。如果,当主库挂掉的时候,可以在访问ip不变的前提下,自动将从库作为主库使用,是不是就能避免这种风险?貌似这又涉及到Linux上的服务KeepAlive等等。

在Mongodb中,提供了一种优于主从模式的集群复制(ReplicateSet)。最理想的模式是,节点之间不分特定的主从。任何一个节点都可以是主节点primary,而其他节点都是secondary,甚至可以通过投票方式选出主节点。… 阅读全文

Spring的JTA事务配置

  categories:资料  author:

JTA主要用于分布式的多个数据源的两阶段提交的事务,而JDBC的Connection提供的单个数据源的事务; 后者因为只涉及到一个数据源,所以其事务可以由数据库自己单独实现, 而JTA事务因为其分布式和多数据源的特性, 不可能由任何”一个”数据源实现事务, 因此JTA中的事务是由”事务管理器”实现的,它会在多个数据源之间统筹事务,具体使用的技术就是所谓的”两阶段提交”, 一般JTA事务都是用于EJB中(因为EJB本身也是分布式的), 所以一般的应用服务器都有自己的事务管理器用来管理JTA事务,注意这并不表示EJB容器有管理事务的功能; 事实上也有单独的事务管理器比如开源的Tyrex. 如果只用Tomcat做应用服务器的话是不能使用JTA事务的;

使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。在下面,我们将看一下如何用 JTA 进行事务界定。因为 JTA 不像 JDBC 那样有名,所以我们首先做一个简介。

JTA 简介
Java 事务 API(JTA) 及其同门兄弟 Java 事务服务(Java Transaction Service JTS)为 J2EE 平台提供了分布式事务服务。一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者之间的通信
Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻。但是很大部分人都还认为脱离Java EE应用服务器就无法使用JTA事务,这是一个误解。其实,通过配合使用ObjectWeb的JOTM开源项目,不需要Java … 阅读全文

Neo4j集群安装

  categories:资料  author:

“图”一直是计算机算法研究的重要领域,但由于图的复杂性缺少成熟的产品。直到社交网络的普及,社会化关系网和复杂网络的更入研究,大家对于“图数据库”有了更强烈的需求。图数据库产品也趋向成熟,慢慢地走进了大家的视野。

Neo4j就是图数据库的代表之作。

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

neo4j-intro

目录

  1. Neo4j简介
  2. Neo4j单机安装
  3. 创建一个简单的社交关系图
  4. Neo4j集群安装HA

1. Neo4j简介

Neo4j是一个用Java实现的、高性能的、NoSQL图形数据库。Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模。Neo4j完全兼容ACID的事务性。Neo4j以“节点空间”来表达领域数据,相对于传统的关系型数据库的表、行和列来说,节点空间可以更好地存储由节点关系和属性构成的网络,如社交网络,朋友圈等。

由Neo4j构建“图”模型,也可以准确表达 数据库模型,key-value模型,文档模型的数据关系。

2. Neo4j单机安装

系统环境

  • Linux: Ubuntu 12.04.2 LTS 64bit Server
  • SUN Java: 1.6.0_29 64-Bit

下载neo4j-enterprise,企业版


~ wget http://dist.neo4j.org/neo4j-enterprise-1.9.4-unix.tar.gz
~ tar 
阅读全文

10分钟上手图数据库Neo4j

  categories:资料  author:

Neo4j 是一个高性能的 NoSQL 图形数据库。Neo4j 使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系。很多应用中数据之间的关系,可以很直接地使用图中节点和关系 的概念来建模。对于这样的应用,使用 Neo4j 来存储数据会非常的自然,要优于使用关系数据库。

 

什么是图数据库

图数据库名字的由来其实与其在底层的存储方式有关,Neo4j底层会以图的方式把用户定义的节点以及关系存储起来,通过这种方式,可是高效的实现从某个节点开始,通过节点与节点间关系,找出两个节点间的联系。

从这段描述中可以猜得到,在Neo4j中最重要的两个元素就是节点和关系。说到节点和关系,就必须引出一个非常重要的概念,属性图模型(Property Graph Model)。如下所示:

  • 一个图中会记录节点和关系
  • 关系可以用来关联两个节点
  • 节点和关系都可以拥有自己的属性
  • 可以赋予节点多个标签(类别)

接下来用一个实际的例子来解释下这个模型,最近在虎扑上被吹捧的特别厉害的恩比德大帝曾经爆出过他自己PS的一张图,隔空示爱蕾哈娜,参考下图

我们尝试用Property Graph Model来表示这样的一个关系。

上图中定义了两个节点,恩比德和蕾哈娜,类别分别是球员和歌手,分别拥有身高,国籍以及生日,血型属性。两个节点之间通过一个“喜欢”关系关联,“喜欢”关系拥有自己的一个属性“自从”,属性值为2014年。

Neo4j数据库的优势
  • 在创建节点的时候就已经把关系给建立起来,避免了在复杂查询场景下的处理
  • 由于底层直接以图的形式存储节点和关系,在查询的时候可以使时间复杂度保持在常数级别。
  • 基于JVM实现
  • 提供一套易于理解的查询语言Cypher以及内置的可视化UI
  • 很好的支持ACID,有事务机制
Neo4j安装及实践

为了方便大家搭建环境,本文还是会用Docker来运行一个包含Neo4j的容器,Docker下载安装参考这里。在下文中会根据之前引用的恩比德大帝的例子来介绍Cypher语句。

从Docker Hub上pull一个Neo4j的镜像

docker pull neo4j

启动一个Neo4j的容器,

阅读全文


快乐成长 每天进步一点点