java.lang.OutOfMemoryError: PermGen space:
错误解释:内存溢出
解决办法,tomcat安装目录--bin--catalina.bat:
找到: echo Using CATALINA_BASE: "%CATALINA_BASE%"
在这句话上面加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m,然后想修改多大就可以改成什么
问题2:
集成本地仓库的问题:依赖爆红,注解爆红,以及Libraries没有相应的依赖问题
1.本地maven一定要安装好,
检测方式 cmd–mvn -v 有maven的版本以及其他内容,安装成功,否则失败
2.在maven安装路径下:
conf—setting.xml中指定自己的maven依赖包的地址:
如下图:
3.一定要注意检查自己本地仓库的依地址,如下图
4.这个时候注解爆红,光标到报错的注解上 alt+enter: 找到添加路径的标识,点击,这个时候,所有的依赖,就会自动导入到Libraries中,
另外:单个导出的方式如下图:
问题3:
前端是var类型,也就是相当于是String类型的数据,但是后端需要是Date类型的,这个时候,如果直接传,会报错,
解决办法:后端的date数据类型上面,加注解@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd HH:mm:ss zzz yyyy"),后面的样式我这里跟前端的样式不一致,没有后面的zzz yyyy.也是可以的。
问题4:
前端请求后端的过程步骤如下:
1.需要定义一个js,来确定后端的请求路径:
//可以引入其他的别的文件, import service from '../../......'
let myUrl=“请求的路径”
export const 方法名 =query=>{
return service({
url:myUrl+"具体的方法名",
method:'post' //请求类型
data:query //传的参数 data:是字段们也就是一个一个的值,params:这个是拼接的字符
})
}
2.在相应的前端页面,引入,并载入你的这个方法
在相应的页面上:
引入上面写的js
import {js中的方法名,多了用“,”隔开} from '../../../' 最后这个路径是上面js的路径
在实现方法的时候:
方法名(传的参数).then(
function(msg){ //程序无错误的时候,返回的数据 也就是ajax中的success
),
function(){ //程序出错的时候执行的方法,也就是ajax中的error
}
jdbc错误:too mant connections:
原因1:首先查看代码中连接数据之后有没有close()关闭释放资源
2.查看自己的mysql数据库中的最大连接数是不是过小(命令:show global variables like 'max_connections')
问题:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/E:/maven/setup/apache-maven-3.6.3-bin/maven-repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/E:/maven/setup/apache-maven-3.6.3-bin/maven-repository/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.slf4j-log4j12.classic.util.ContextSelectorStaticBinder]
错误原因:找到两个路径一样的StaticLoggerBinder.class,实际绑定的是org.slf4j.slf4j-log4j12.classic.util.ContextSelectorStaticBinder,所以启动不了
解决办法:让其绑定ch.qos.logback.classic.util.ContextSelectorStaticBinder,删除掉org/slf4j/slf4j-log4j12的绑定信息,就是直接从pom文件中删除slf4j-log4j12的依赖,刷新maven,重新启动
问题:注意,我这里是内网环境
springboot启动失败,找不到或无法加载主类
解决办法:cmd cd 项目路径
mvn clean install 回车 删除之前的target文件重新生成
没有做的话就继续下一步,有错误,
我这里遇到的问题是生成doc文件的时候,扫描到注解,然后报错,这个东西是区分jdk1.7和1.8的呢,如下是解决办法:
方法一:写死 这里我是用的这个方法
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
<additionalJOptions>
<additionalJOption>-Xdoclint:none</additionalJOption>
</additionalJOptions>
</configuration>
</plugin>
方法二:灵活配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<additionalparam>${javadoc.opts}</additionalparam>
</configuration>
</plugin>
<profiles>
<!-- 禁用注释检查 -->
<profile>
<id>disable-javadoc-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
</profiles>
原文链接:https://blog.csdn.net/qq_30038111/article/details/106279837
mvn clean compile 重新编译
mvn install 重新打包
最后再重新启动
在连接Hbase的过程中,出现错误:
Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:229)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:202)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:326)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:301)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:166)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:161)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:794)
at org.springframework.data.hadoop.hbase.HbaseTemplate$1.doInTable(HbaseTemplate.java:132)
at org.springframework.data.hadoop.hbase.HbaseTemplate.execute(HbaseTemplate.java:61)
... 75 more
本地错误原因:
org.google.guava版本过高导致的,本地Hbase是1.2.5,之前的guava版本是19.0,但是guava17之前和之前差别是很大的,Stopwatch方法改变,
解决办法:把guava版本降低到17之下,这里用的是16,问题解决
java连接Hbase的时候,Hbase用的是外部的zookeeper,连接的时候,控制台不报错,一直报null,直到超时
报错如下:
DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8 replyHeader:: 26,154618875983,0 request:: '/hbase,F response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table},
DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8 replyHeader:: 26,154618875983,0 request:: '/hbase,F response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table}
DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x3026ec487b30049, packet:: clientPath:null serverPath:null finished:false header:: 26,8 replyHeader:: 26,154618875983,0 request:: '/hbase,F response:: v{'replication,'meta-region-server,'rs,'splitWAL,'backup-masters,'table-lock,'flush-table-proc,'region-in-transition,'online-snapshot,'master,'running,'recovering-regions,'draining,'namespace,'hbaseid,'table}
解决办法:
需要在你电脑的host文件中加上那个zookeeper的hosts和主机名
hoast文件地址:C:\Windows\System32\drivers\etc\hosts(windows)
格式如下:127.0.0.1 node01 //这里的node01是主机名
错误:运行hive的时候
java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException):
User root is not allowed to impersonate anonymous
原因:因为hive是基于hadoop的,需要在hadoop中配置参数,java才能访问,否则,无法用java连接
修改:
修改 etc/hadoop/core-site.xml 加上 参数 此处我是用root运行的hadoop.,所有报的是root没有被允许,所以修改的参数也是root的用户,一定要注意你hadoop运行的用户
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
导入josn的问题
问题描述:
程序导出json之后,然后用编辑器打开json文件,然后保存,再导入程序的时候,会报错,a jsonobject text must begin with '{' 也就是说,json格式开头必须是{开头
问题原因:
就是因为编辑器的原因,编辑器选用的utf-8编码的时候,会在文件前方和后方加一些编码字段,这也就是所说的bom头,
解决办法:就是把加上的bom头去掉,就可以啦,
具体方式:
方式1:String sbString=getJsonString;
if(StringUtil.isNotBlank(sbString) && sbString.startWith("\ufeff")){ //这里的参数是bom的编码
sbString=sbString.subString(1);
}
方式2:
String sbString=getJsonString;
if(StringUtil.isNotBlank(sbString)){ //这里的参数是bom的编码
sbString=sbString.subString(sbString.indexOf("{"),sbString.lastInddexOf("}")+1)
}
springboot中,自己写的dao层以及sql的实现,报如下错误:available parameters are list
原因:这个是因为mybatis传值默认是把传的参数封装到一个map中在sql中实现自己替换,但是,传list的时候,封装到map的时候出现错误
解决:在传值的时候,加上参数的注解@Param("list") List<String> list
springboot访问静态资源的问题
方式1:这里配置自定义拦截器并且配置静态资源
@Configuration
public class TnterceptorConfig implements WebMvcConfigurer( //这是过滤的白名单
@Bean
public HandlerInterceptor getInterceptor(){ //正式的拦截器
return new MyInterceptor
}
@Override
public void addInterceptors(InterceptorRegistry registry){ //这是白名单
list<String> list=new ArrayList<>(); //白名单的列表
list.add("file/**")
registry.addInterceptor(getInterceptor())
.addPathPatterns("/**") //拦截所有的请求
.excludePathPatterns(list); //释放不希望被拦截的请求
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/file/**")
.addResourceLocations("classpath:/file/");
//多个静态资源地址,上面的代码写多个,就行
}
}
方式2:在配置文件中写
这里展示application.properties
srping.mvc.static-path-pattern=/file/** //这个是请求必须加上/file/
spring.resources.static-localtions=classpath:/file,classpath:/static //设置静态资源的位置,多个,隔开
注意:本人只试验了静态位置多个,当时没有试验访问多个路径的时候,srping.mvc.static-path-pattern不知道能不能设置多个
shiro的问题
问题1:搭建过程中
shiroConfig 中,配置好三个核心方法之后,启动的时候,报循环依赖的文艺,这个是因为需要设置shiro中的@bean的声明周期,具体代码如下:
@Configuration
public class ShiroConfig {
@Bean(name="shiroFilterFactoryBean")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("webSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
// 设置安全管理器
bean.setSecurityManager(defaultWebSecurityManager);
/** 添加shiro的内置过滤器
* anon:无需认证就可以访问
* authc:必须认证才可以访问
* user:必须拥有 ”记住我“ 功能才能访问
* perms:拥有对某个资源的权限才能访问
* role:拥有某个角色权限才能访问
* **/
// 拦截
Map<String, String> filterChainDefinitionMap=new LinkedHashMap<>();
// 授权
filterChainDefinitionMap.put("/swagger-ui.html","anon");
filterChainDefinitionMap.put("/webjars/**","anon");
filterChainDefinitionMap.put("/swagger-resources/**","anon");
filterChainDefinitionMap.put("/swagger-ui.html","anon");
/*filterChainDefinitionMap.put("/user/add","perms[user:add]");
filterChainDefinitionMap.put("/user/update","perms[user:update]");
filterChainDefinitionMap.put("/user/*","authc");*/
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
// 设置没有登录返回到登录页面
//bean.setLoginUrl("/tologin");
// 设置没有授权返回到的提示页面
//bean.setUnauthorizedUrl("/unauthorized");
return bean;
}
/**
* //bean的生命周期
* @return 解决启动循环依赖的问题
*/
@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
return new LifecycleBeanPostProcessor();
}
/**
* 核心对象二:安全对象 DafaultWebSecurityManager 排序2
* @param customRealm
* @return
*/
@Bean(name = "webSecurityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("customRealm") UserRealm customRealm,CustomShiroSession sessionManager){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 关联realm
securityManager.setRealm(customRealm);
// shiro的sessionId
securityManager.setSessionManager(sessionManager);
return securityManager;
}
@Bean
public UserRealm customRealm(){
return new UserRealm();
}
/**
* 自定义的shiroSession,前后端分离的时候,前端传回来的header里面必须包含这个东西authToken
* @return
*/
@Bean
public CustomShiroSession sessionManager(){
CustomShiroSession customShiroSession=new CustomShiroSession();
customShiroSession.setSessionDAO(new EnterpriseCacheSessionDAO());
return customShiroSession;
}
}
问题2:shiro前后端分离的时候,token的问题,因为登录时候,shiro认证,会产生一个sessionId,然后没程序中每一处获取当前登录用户的时候,都是需要这个sessionId的,否则,拿不到用户信息,报错,所以建议,直接用这个sessionId来当token,每次前端传回来之后,都需要这个token,才能获取用户信息,方式如下:
public class CustomShiroSession extends DefaultWebSessionManager {
private final static Logger logger= LoggerFactory.getLogger(CustomShiroSession.class);
private static final String AUTH_TOKEN="authToken";
private static final String REFERENCED_SESSION_ID_SOURCE="Stateless request";
public CustomShiroSession(){
super();
// 失效时间15分钟
//setGlobalSessionTimeout(MILLIS_PER_MINUTE*15);
}
@Override
protected Serializable getSessionId(ServletRequest request, ServletResponse response){
String sessionId= WebUtils.toHttp(request).getHeader(AUTH_TOKEN);
if (StringUtil.isBlank(sessionId)) {
return super.getSessionId(request,response);
}else{
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE,REFERENCED_SESSION_ID_SOURCE);
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID,sessionId);
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID,Boolean.TRUE);
return sessionId;
}
}
}
在结合上一个问题中Config中有配置sessionManager,就可以了
拦截器handler instanceof HandlerMethod一直是false
原因:是因为在拦住的方法上,加上了@CacheEvich(value={”a“})这个注解,把这个注解移动到service层上,就解决这个问题了
Atlas集成hive之后,有两个需求
1.hive能正常使用,能使用命令增删改查
2.Atlas能实时同步hive里面的元数据
我这里遇到的问题:
1.HiveHook.run():failed to process operation CREATETABLE 这个是不能实时同步Hive的增量数据
2.org.atache.atlas.hive.hook.HiveHook.Initialize(HiveHook.java.76) hivehook不能初始化
解决办法:
步骤1:atlas安装目录下的hook/hive/atlas-hive-plugin-impl 连带目录atlas-hive-plugin-impl以及下面的文件,直接复制到hive安装目录下的lib下面(应该也可以把Atlas/hook/hive/atlas-hive-plugin-impl/下的文件一起复制到hive的lib下)
步骤2:hive的配置文件。hive-env.sh 添加配置
export HIVE_AUX_JARS_PATH=指向hive下的lib就可以了
问题:hive执行计算sql,调用mapreduce失败,指出当前用户没有权限操作/tmp/hadoop-yarn下的东西
原因:这里使用的权限比较小的用户,权限不够
解决办法:
1.进入到hadoop的目录下
2.执行命令:sudo bin/hadoop fs -chmod -R 777 /tmp/hadoop-yarn
maven打包的时候遇到:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project gulimall-coupon...
原因:缺少maven-surefire-plugin这个包导致
解决办法:
方法1:pom.xml文件中加上这个依赖
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
方法2:打包的时候设置跳过测试