首页 » 2019年5月

open feign默认不打印日志,这对debug很不方便,配置方法如下

[1]配置config

@Configuration
public class UserClientConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.HEADERS;
    }
} 

[2]配置feignclient

@FeignClient(name = "User", url = "http://localhost:8080",configuration=UserClientConfig.class)
public interface UserClient {

    @RequestMapping(method = RequestMethod.GET, value = "/user")
    List<User> getAllUsers();    

}

[2]配置application.properties

logging.level..UserClient:DEBUG

Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column """BRIEF"" VARCHAR(255) ,h2 生成的默认长度是255
[1]报错如下:
Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column """BRIEF"" VARCHAR(255)": "STRINGDECODE('\uff1aDuenpatra\uff08pim\uff09\u5728\u5979\u7684\u7956\u6bcd\u4f4f\u5b85\u7684Prapim\u5f00\u4e86\u4e00\u5bb6\u81ea... (320)"; SQL statement:
insert into my_season (actors, brief, cat, cover, finish, pinyin, plays, rating, score, season_no, title, title_en, year, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-199]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:455) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.table.Column.validateConvertUpdateSequence(Column.java:441) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.table.Table.validateConvertUpdateSequence(Table.java:824) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.command.dml.Insert.insertRows(Insert.java:175) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.command.dml.Insert.update(Insert.java:132) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.command.CommandContainer.update(CommandContainer.java:133) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.command.Command.executeUpdate(Command.java:267) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200) ~[h2-1.4.199.jar:1.4.199]
    at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) ~[h2-1.4.199.jar:1.4.199]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    ... 89 common frames omitted

[2]解决办法,加上下面的声明,注意如果是内存中,需要重启,如果文件中,需要删除重新运行

@Column(length = 2000)
private String brief;

[3]或者


@Column(columnDefinition = "TEXT")
private String brief;

-----------------概述-----------------------
1.mongodb 使用了文档,而不是行,没有了schema的约束,支持更多类型,修改更方便,传统mysql修改schema,尤其是数据比较多的时候很痛苦
2.mongodb不支持join操作,因为这个在分布式中效率不高
3.mongodb支持time-to-live类型的collections,可以很好的用来存储session
4.mongodb会为文档之间预留空间padding,来对修改文档提供稳定的性能,否则要删除重建。
5.mongodb设计初衷为不牺牲性能,所以一些传统数据库的特性支持的不好,需要客户端自己处理
-----------------概念-----------------------
1.document 类似于RDB的行,但是更具表现力
2.collection类似于RDB的table,但是schema是动态的dynamic
3.一个mongoDb实例可以包含多个独立的数据库databases,每个database有自己的collection
4.每个document都有一个特殊的key,"_id"在一个collection中他是唯一的
5.Mongodb有一个shell,用javascript语言管理数据库
--------------------------基础知识----------------------
1.Document ---一组set有序的key和他关联的值组成的集合。

  • 每个变成语言都有这种数据结构,如map,hash,dictionary,javascript中表示为对象。
{"greeting" : "Hello, world!"}
  • 文档的值可以是一个基础类型,也可以是一个内嵌文档
  • key只能是一个UTF8的字符串,和C语言一样,0结尾,所以不能包含0。点和$都是保留字符
  • mongodb是一个类型敏感的,大小写页面干,3和"3"是不同的类型
  • key是不可以重复的。并且key是有序的。不同的顺序表示不同的文档,如下。但是同常,顺序不重要,这两个文档在实际使用中作用是一样的,好多语言对文档类型map本身没有顺序要求。
{"x" : 1, "y" : 2}
{"y" : 2, "x" : 1}

2.collections
3.dynamic schemas

  • 同一个collection可以有不同schema的文档
{"greeting" : "Hello, world!"}
{"foo" : 5}
  • 但是collection还是必要的,数据类型可以不同,但是总归还是同一类数据,并且速度上,分开查询更快,索引同一个字段。

3.naming---------collection有一个utf8的名字

  • ”“不允许
  • 不能包含0
  • 不能以system开头,这个系统的保留前缀
  • 不能有$

4.子集合blog.authors blogs.posts,用点分开

  • 子集合和所谓的父(这里是blog)并没有关系,只是名义上的组织关系
  • 但是子集合在GFS和语法糖上有用处,比如db.blog.posts db.blog,让他们用起来更有逻辑性

5.databases

  • 名字不能包含"",/, , ., " , *, <, >, :, |, ?, $, (,0 。基本上只能用ASCII定义的字符和数字
  • 名字大小写是敏感的,最长64bytes
  • 数据库名---这么多限制是因为,最终一个数据库名最终会变成文件名的一部分
  • 预留数据库名字 admin----root数据库,一个用户添加到这个数据库,就与偶所有数据库的权限。还有一些名列---如列出所有数据库,关闭服务器,只能在这个库运行
  • 预留数据库名字local----这个数据库没有副本,智慧保留本地
  • 预留数据库名字config----这里用来保存shard信息

6.mongo shell ----直接命令行mongo即可打开
7.mongo client

  • mongoshell 真正的威力是他本身是一个独立的mongo client ,启动的时候建立连接,并将链接赋值给全局变量db
  • mongo shell 提供了一些非js的扩展语法糖
use footbardb #选择使用数据库,
db #显示当前db

8.基础操作

  • create
post = {"title" : "My Blog Post",
... "content" : "Here's my blog post.",
... "date" : new Date()}
{
"title" : "My Blog Post",
"content" : "Here's my blog post."
}
db.blog.insert(post)
db.blog.find()
{
"_id" : ObjectId("5037ee4a1084eb3ffeef7228"),
"title" : "My Blog Post",
"content" : "Here's my blog post.",
"date" : ISODate("2012-08-24T21:12:09.982Z")
}
  • read ---
db.post.findOne()
  • update (限定条件,新的文档),只会更新新文档中的字段
db.blog.update({title : "My Blog Post"}, post)
  • remove(限定条件)

9.类型

  • 类似json,但是json仅有6种类型 null, boolean, numeric, string, array, object。不支持日期类型,数字类型无法区分浮点数和整数。无法表示long类型,还有通用类型:正则---函数等
  • mongodb保持json的基础上,增加了其他类型。
  • null 表示空值,或者不存在的字段
  • boolean ---true ,false
  • number ---默认64位浮点数,还有numberInt,numberLong类
{"x" : 3.14}
{"x" : NumberInt("3")}
{"x" : NumberLong("3")}
  • string
{"x" : "foobar"}
  • date 日期被存储为新纪元以来的毫秒数.注意Date返回的是日期的字符串,new Date才是返回Date对象
{"x" : new Date()}
  • regular expression正则表达式类型,使用与查询条件
{"x" : /foobar/i}
  • array ----数据列表,注意数组中可以包含不同类型。而且可以在数组上创建索引,从而优化数组中的查询速度
{"x" : ["a", "b", 3]}
  • 内嵌文档embedded document,内嵌文档,同样可以创建索引,如果你想根据内嵌文档的key搜索这个文档
{"x" : {"foo" : "bar"}}
  • object id---12 byte的id,12个bytes,显示成24个16进制数,包含时间信息(可以获取).由客户端的driver生成。
{"x" : ObjectId()}

0 1 2 3  Timestamp
4 5 6 Machine
 7 8 PID
 9 10 11 Increment
  • binary data ----任意字节的字符串,不能直接在shell中使用
  • code 查询中,或者文档中可以包含代码
{"x" : function() { /* ... */ }}

10.

JDK 自带了一些监控monitoring工具,用来查看JVM内部
  1. jcmd ,使用方法--- jcmd process_id command optional_arguments .用来打印JVM的进程线程,基本类型信息
jcmd -l #列出所有java进程
jcmd 25329  help #列出可以用的命令
jcmd 25329 PerfCounter.print #打印性能信息