【大数据】大数据学习填坑之路

大数据学习填坑之路

  • 1. 20/09/11 22:18:26 ERROR boot.SpringApplication: Application startup failed
    • 问题log
    • 分析:
  • 2. 20/09/11 22:30:47 ERROR pool.DruidDataSource: testWhileIdle is true, validationQuery not set
    • 问题log
    • 分析:

1. 20/09/11 22:18:26 ERROR boot.SpringApplication: Application startup failed

问题log

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
	at org.yaml.snakeyaml.Yaml.loadAll(Yaml.java:463)
	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160)
	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:138)
	at org.springframework.boot.env.YamlPropertySourceLoader$Processor.process(YamlPropertySourceLoader.java:101)
	at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:58)
	at org.springframework.boot.env.PropertySourcesLoader.load(PropertySourcesLoader.java:127)
	at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:473)
	at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:460)
	at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:380)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:215)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:184)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:171)
	at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:157)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:73)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:336)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)
	at com.travel.OrderMonitorApp.main(OrderMonitorApp.java:12)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
	at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
	at java.io.InputStreamReader.read(InputStreamReader.java:184)
	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:123)
	at java.io.Reader.read(Reader.java:140)
	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
	... 24 more

分析:

首先,snakeyaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型(map,omap,set,常量,具体参考http://yaml.org/type/index.html)。官方为:https://yaml.org/。因此:
第一种可能是application.yml文件编码格式有问题,改为UTF-8。
【大数据】大数据学习填坑之路_第1张图片
第二种可能就是项目使用的yml文件是通过把其他类型的文件后缀名直接改为yml生成的,这时候就需要把这些yml中的内容全部复制,然后删除,重新建一个yml文件,并将复制的内容拷贝进去,然后再运行项目。

2. 20/09/11 22:30:47 ERROR pool.DruidDataSource: testWhileIdle is true, validationQuery not set

问题log

20/09/11 22:30:47 ERROR pool.DruidDataSource: testWhileIdle is true, validationQuery not set
20/09/11 22:30:47 INFO pool.DruidDataSource: {
     dataSource-1} inited

分析:

这里使用的Durid是一种阿里开源的数据库连接池组件,Github地址为:https://github.com/alibaba/druid/。它包括三部分:

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
  • DruidDataSource 高效可管理的数据库连接池。
  • SQLParser

Druid可以做的事情包括:

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  2. 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4jJdkLog,可以按需要选择相应的LogFilter,监控应用的数据库访问情况。

这两行报错,是因为没有SpringBoot框架xml配置,在不使用框架的情况下;怎么解决呢;
第一行的ERROR表示没有设置验证查询语句,而第二行是日志信息,没有错,因为Druid采用了日志打印机制,这不是报错;连接池采用了懒加载,真正用到的时候才初始化。
为例解决这个异常,在application.yml中添加如下配置信息:

#  datasource.driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
#  datasource.url: jdbc:phoenix:node01,node02,node03:2181
  datasource.type: com.alibaba.druid.pool.DruidDataSource
  # 数据库连接池的补充设置
  druid:
    driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
    url: jdbc:phoenix:node01,node02,node03:2181
    username: root
    password: 123456
    # 配置监控统计拦截的filters:{stat,wall,log4j},去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat
    # 初始化大小, 最小、最大
    initialSize: 2
    maxActive: 30
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    # 测试连接是否可用的SQL语句,默认值每种数据库都不相同,mysql是SELECT 1;
    validationQuery: SELECT 1
    # 遇到testWhileIdle,testOnBorrow,testOnReturn时,就会验证连接的有效性,使用ping
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 关闭PSCache
    poolPreparedStatements: true
    # 指定每个连接上PSCache的大小
    maxPoolPreparedStatementPerConnectionSize: 200
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true

这样做的目的就是把driver、url、username、password放到druid下面,这样才不出错。

你可能感兴趣的:(BigData大数据学习与实战,Durid,MySQL,HBase,JDBC,DataSource)