今天在做从将MySQL中的数据同步到ES的时候,当启动脚本程序报错:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/xbib/tools/Runner : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

很明显错误是由于JDK版本问题导致的。我所使用的elasticsearch-jdbc-2.3.3.1是由JDK1.8编译的(由高版本编译的class文件不能在低版本中运行,但是低版本可以在高版本中运行)

而我现在的环境中默认是JDK1.7所以导致错误的发生。

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

ok。找到了问题,那么解决起来就方便了。因为这台服务器上tomcat中的工程使用的是1.7,所以这里我为es创建了一个账户,对es账户设置特定的环境变量(JDK1.8)。


操作步骤:

第一步:修改/home/es目录下的.bash_profile文件,添加上JAVA环境变量

[es@sgadmin ~]$ vim .bash_profile
# .bash_profile

# Get the aliases and functions
#if [ -f ~/.bashrc ]; then
#       . ~/.bashrc
#fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export JAVA_HOME=/home/es/jdk1.8.0_92
export PATH=$JAVA_HOME/bin:$PATH

第二步:使用source命令,使配置文件生效。source .bash_profile

第三步:使用java -version 命令,查看当前用户java环境


改进:每次登陆后自动执行source命令

如上操作在当前的窗口是可以执行当前的环境变量,但是当你这个用户下一次再登陆的时候,那么还是使用的是默认的环境变量,如果需要特定的环境变量,那么需要再次使用source命令。这样做起来非常麻烦。

这里其实可以让用户每次登陆的时候自动执行一次 source .bash_profile

其实当我们每次登陆后 能使用一些特定的命令比如ls ll 等等其实都是自动的加载了系统的一些环境变量。

有了这个思路以后我们只要找到每次登陆都会执行的那个文件,在里面添加上我们的source 命令即可。

这里需要修改的就是自己目录下的.bashrc文件(/home/es/.bashrc)

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

source $HOME/.bash_profile

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

在这里需要注意,如果使用此种方式,那么需要将.bash_profile中的如下代码注释掉,否则会处于无限等待的状态,然后报错:Segmentation fault。其实思考一下就知道为什么会报这个错误。(出现了Segmentation fault,基本上的原因是,非法的内存访问。例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时间偶成功。)

# Get the aliases and functions
#if [ -f ~/.bashrc ]; then
#       . ~/.bashrc
#fi

扩展:

  1./etc/pro      此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
  2./etc/bashrc     为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
  3.~/.bash_pro    每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
  4.~/.bashrc     该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.
  5.~/.bash_logout 当每次退出系统(退出bash shell)时,执行该文件.

  source  /etc/profile  与  .  /etc/profile效果一样。

Linux为用户设定环境变量的更多相关文章

  1. Linux设定系统变量和单个用户的环境变量问题

    环境为Ubuntu. 设定系统变量意思就是所有用户都可以使用设定的环境变量,而设定用户的单个环境变量意思就是只有设定环境的该用户才可以使用这个环境变量. 这里以java的jdk环境变量JAVA_HOM ...

  2. Linux命令之env:显示当前用户的环境变量

    Linux系统里的env命令可以显示当前用户的环境变量,还可以用来在指定环境变量下执行其他命令.下面来比较一下set,env和export命令的异同:set命令显示当前shell的变量,包括当前用户的 ...

  3. 嵌入式 Linux下永久生效环境变量bashrc

    嵌入式 Linux下永久生效环境变量bashrc 1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到 ...

  4. Linux系统下配置环境变量

    一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...

  5. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...

  6. linux网络配置、环境变量以及JDK安装(CentOS 6.5)

    由于需要搭建hadoop平台,但是苦于没有现成可用的linux服务器,只好自己下载了CentOS 6.5从头装起,安装过程中遇到了很多问题,比如网络配置.时钟同步.环境变量配置.以及各种服务的启停,还 ...

  7. Linux下配置Node环境变量及问题详解

    这是之前在Linux下配置Node环境变量时踩过的坑,今天又有小伙伴询问这个问题,因此记录下来,不仅是给新童鞋们一些参考,也方便日后查阅 在这之前,相信都已经安装好了,没安装的可以查看博主另一篇文章 ...

  8. Linux下各种常见环境变量的配置

      Linux系统下各种环境变量都通过修改/etc/profile文件来实现.由于是系统文件,修改此文件需要root权限.因此实现以下功能都需要用户拥有root权限. 另:不要轻易修改profile文 ...

  9. linux添加、修改环境变量

    比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.In shell: setenv <path_to_append>: $ENVNAME setenv PATH ...

随机推荐

  1. Java线程Dump分析工具--jstack【转载】

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  2. 路由器的nat模式、路由模式和全模式

    NAT模式.此模式下,由局域网向广域网发送的数据包默认经过NAT转换,但路由器对所有源地址与局域网接口不在同一网段的数据包均不进行处理.例如,路由器LAN口IP设置为192.168.1.1,子网掩码为 ...

  3. php编译错误Note that the MySQL client library is not bundled anymore或者cannot find mysql header file

    rpm -ivh MySQL-devel-community-5.1.57-1.sles10.x86_64.rpm export PATH=/usr/local/services/libxml2-2. ...

  4. CSDN挑战编程——《数学问题》

    数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<=100: 设S=max{x1*a1+x2*a2+x ...

  5. SVN经常使用命令说明

    SVN版本号:1.5 及更新版本号 名词说明: WC:Working Copy 你的工作区 Versioned:受控的:受版本号控制的 SVN是什么? SVN是开源的版本号控制系统. 比CVS很多其它 ...

  6. Java基础知识强化95:Calendar类之Calendar类的add()和set()方法

    1. Calendar的add()和set()方法: public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作 public ...

  7. 多线程、Service与IntentService的比较

    资料摘自网络(侵删)     Service Thread IntentService AsyncTask When to use ? Task with no UI, but shouldn't b ...

  8. linux 管道命令 小记

    管道命令(pipe) 使用“|”界定符号 管道命令必须能够接收来自前一个命令的数据成为standard input才能继续处理 1.选取命令:cut, grep.分析数据,取出我们想要的. -cut ...

  9. C#总结项目《影院售票系统》编写总结完结篇

    回顾:昨天总结了影院售票系统核心部分-售票,整个项目也就完成了2/3了,需求中也要求了对销售信息的保存,今天就继续总结销售信息的保存以及加载销售信息. 分析:退出程序时将已售出票集合中的对象循环写入到 ...

  10. Windows离线安装.NET3.X

    Windows离线安装.NET3.X 当我们在Windows上安装软件的时候,总是会提示需要安装.NET3.X.而大多数人们选择在线安装,这样会很慢,不少人想到了离线安装的方式.其是只要你的电脑是Wi ...