- spark读取配置文件中的配置
spark-submit
--files /data/apps/config.properties
- spring boot 两种配置文件,一种是
application.properties
,另一种是application.yml
massage:
data:
name: haha
-- 注意:中间是有一个空格
- spring boot 多环境配置,通过指定启动参数使用不同的profile,比如:
spring:
profiles:
active: prod
测试环境:
java -jar my-spring-boot.jar --spring.profiles.active=test
生产环境:java -jar my-spring-boot.jar --spring.profiles.active=prod
- 配置文件数据的读取
@Value("${message.data.name}")
private String name;
- mybatis配置文件
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath*:mybatis-config.xml"/>
<property name="mapperLocations">
<list>
<value>classpath:/com/atcl/elwin/platform/mapper/*Mapper.xml</value>
</list>
</property>
classpath
是指WEB-INF
文件夹下的classes
目录
查询jar
中的指定的配置文件需要classpath*
- maven
一个仓库一般分为public(Release)
仓和SNAPSHOT
仓,前者存放正式版本,后者存放快照版本。
指定的版本号带有-SNAPSHOT
后缀,比如版本号为Junit-4.10-SNAPSHOT
,那么打出的包就是一个快照版本
频繁的发布SNAPSHOT
版本,以便让其它项目能实时的使用到最新的功能做联调;当版本趋于稳定时,再发布一个正式版本,供正式使用。当然在做正式发布时,也要确保当前项目的依赖项中不包含对任何SNAPSHOT
版本的依赖,保证正式版本的稳定性。 - unit test
@RunWith(SpringRunner.class)
@SpringBootTest
- applicationContext.xml生成mapper时,要把之前的xml删除掉,否则会往后追加,报以下错误:参考文章
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.mapper.PetMapper.BaseResultMap
- sqlSessionFactory报以下错误:
将公司的MapperScannerConfigurer
改成默认org.mybatis.spring.mapper.MapperScannerConfigurer
解决问题
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tcMapper'
defined in file xxxxxxxx: Error setting property values;
nested exception is org.springframework.beans.PropertyBatchUpdateException;
nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'sqlSessionFactory' threw exception;
nested exception is java.lang.NullPointerException
- Spring 配置方式,指定默认配置
@Value("${NamesrvAddr:192.168.0.1}")
- Sprint boot scala
报错:making jar files - No auto configuration classes found in META-INF/spring.factories
增加如下build plugin即可
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
也有可能,打包后执行
java -jar spring-cloud-eureka-0.0.1-SNAPS HOT.jar
后
提示spring-xxx-xxx-0.0.1-SNAPSHOT.jar中没有主清单属性
怎么查看jar包的主清单呢?
以SpringBoot为例,jar包中包含了三个文件夹:BOOT-INF,META-INF,org,可以把jar包解压到文件夹下查看,其中META-INF文件夹下有一个MANIFEST.MF文件,该文件指明了程序的入口以及版本信息等内容
Manifest-Version: 1.0
Implementation-Title: spring-xxx-xxx
Implementation-Version: 0.0.1-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: XXXX
Implementation-Vendor-Id: com.huyikang.practice
Spring-Boot-Version: 1.5.9.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.huyikang.practice.eureka.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_151
Implementation-URL: http://maven.apache.org
这些值都是SpringBoot打包插件会默认生成的,如果没有这些属性,SpringBoot程序自然不能运行,就会报错:jar中没有主清单属性,也就是说没有按照SpringBoot的要求,生成这些必须的属性。
Main-Class
代表了Spring Boot中启动jar包的程序Start-Class
属性就代表了Spring Boot程序的入口类,这个类中应该有一个main方法Spring-Boot-Classes
代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径下Spring-Boot-Lib
表示依赖的jar包存储的位置
- spark 平台报错
Unsupported major.minor version 52.0
javap -verbose com.xxx.XXClass
可以反编译class信息
改为使用1.7编译即可,maven中增加以下插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
- maven plugin有执行顺序的
- spark 1.6是jdk7,spark 2.0+是jdk8
- spring boot 的启动类为:
org.springframework.boot.loader.JarLauncher
,spark的启动类设置
本机启动命令:
mvn clean spring-boot:run
- 异常解决
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.datasource.CONFIGURATION_PROPERTIES': Initialization of bean failed; nested exception is javax.validation.Validation
Exception: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
- Maven deploy跳过某个module解决办法
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
- 用户编写的spark程序打包成jar后提交到yarn执行时,经常会遇到jar包中明显存在某个类,但任务提交到yarn运行时却找不到类或方法(java.lang.NoSuchMethodError)的问题。
原因是本地的jar包被SPARK_HOME/lib中的jar覆盖。spark程序在提交到yarn时,除了上传用户程序的jar,还会上传SPARK_HOME的lib目录下的所有jar包(参考附录2 )。如果你程序用到的jar与SPARK_HOME/lib下的jar发生冲突,那么默认会优先加载SPARK_HOME/lib下的jar,而不是你程序的jar,所以会发生“ NoSuchMethodError”
spark.driver.userClassPathFirst
spark.executor.userClassPathFirst
- val df = sqlContext.table("dbName.tableName")
Exception in thread "main" org.apache.spark.sql.AnalysisException: Specifying database name or other qualifiers are not allowed for temporary tables. If the table name has dots (.) in it, please quote the table name with backticks (`).;
You can't do that from sqlContext, you'll need to define a HiveContext for that as followed :
https://stackoverflow.com/questions/33221092/need-to-access-hive-table-using-database-qualifier-from-spark