1. 程式人生 > >eclipse建立maven工程讀取hdfs檔案傳送郵件

eclipse建立maven工程讀取hdfs檔案傳送郵件

1、在maven下新建maven工程

2、編寫程式碼

package WorkFlow.Mail;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class MailSend {

	public static void main(String[] args) throws IOException{
		MailSend mail = new MailSend();
		mail.readFile();
		mail.sendmail();
	}
	private void readFile(){
		try {
			Configuration conf = new Configuration();
			FileSystem file = FileSystem.get(conf);
			String path ="/tmp/daily_mail/CN/sql/";
			String Outputpath ="/tmp/daily_mail/CN/hql/";
			FileStatus[] lstStatus = file.listStatus(new Path(path));
			for (FileStatus status : lstStatus) {
				FSDataInputStream inputStream = file.open(status.getPath());
				BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
				String sql = "";
				String line = null;
				while (null != (line = br.readLine())) {
					sql += line;
					sql += " ";
				}
				System.out.println(sql);
				String name = Outputpath + status.getPath().getName();
				FileSystem OutPutfile = FileSystem.get(conf);
				OutPutfile.deleteOnExit(new Path(name));
				OutPutfile.createNewFile(new Path(name));
				FSDataOutputStream Outputfs = OutPutfile.append(new Path(name));
				Outputfs.write(sql.getBytes());
				Outputfs.flush();
				Outputfs.close();
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	private void sendmail() throws IOException{
		Configuration conf = new Configuration();
		FileSystem file = FileSystem.get(conf);
		String path ="/tmp/daily_mail/CN/sql/";
		String Outputpath ="/tmp/daily_mail/CN/hql/";
		String sql = "";
		FileStatus[] lstStatus = file.listStatus(new Path(path));
		for (FileStatus status : lstStatus) {
			FSDataInputStream inputStream = file.open(status.getPath());
			BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));			
			String line = null;
			while (null != (line = br.readLine())) {
				sql += line;
				sql += " ";
			}
		}
		Mail.send("Work Flow send mail Test", sql);
	}
}

Mail.class
package WorkFlow.Mail;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class Mail {
	private MimeMessage mimeMsg;
	private Session session;
	private Properties props;
	private String username;
	private String password;
	private Multipart mp;
	public Mail(String smtp) {
		setSmtpHost(smtp);
		createMimeMessage();
	}
	public void setSmtpHost(String hostName) {
		System.out.println("設定系統屬性:mail.smtp.host=" + hostName);
		if (props == null) {
			props = System.getProperties();
		}
		props.put("mail.smtp.host", hostName);
	}
	public boolean createMimeMessage() {
		try {
			System.out.println("準備獲取郵件會話物件!");
			session = Session.getDefaultInstance(props, null);
		} catch (Exception e) {
			System.out.println("獲取郵件會話錯誤!" + e);
			return false;
		}
		System.out.println("準備建立MIME郵件物件!");
		try {
			mimeMsg = new MimeMessage(session);
			mp = new MimeMultipart();

			return true;
		} catch (Exception e) {
			System.out.println("建立MIME郵件物件失敗!" + e);
			return false;
		}
	}

	/*定義SMTP是否需要驗證*/
	public void setNeedAuth(boolean need) {
		System.out.println("設定smtp身份認證:mail.smtp.auth = " + need);
		if (props == null)
			props = System.getProperties();
		if (need) {
			props.put("mail.smtp.auth", "true");
		} else {
			props.put("mail.smtp.auth", "false");
		}
	}
	public void setNamePass(String name, String pass) {
		username = name;
		password = pass;
	}

	/*定義郵件主題*/
	public boolean setSubject(String mailSubject) {
		System.out.println("定義郵件主題!");
		try {
			mimeMsg.setSubject(mailSubject);
			return true;
		} catch (Exception e) {
			System.err.println("定義郵件主題發生錯誤!");
			return false;
		}
	}

	/*定義郵件正文*/
	public boolean setBody(String mailBody) {
		try {
			BodyPart bp = new MimeBodyPart();
			bp.setContent("" + mailBody, "text/html;charset=GBK");
			mp.addBodyPart(bp);
			return true;
		} catch (Exception e) {
			System.err.println("定義郵件正文時發生錯誤!" + e);
			return false;
		}
	}

	/*設定發信人*/
	public boolean setFrom(String from) {
		System.out.println("設定發信人!");
		try {
			mimeMsg.setFrom(new InternetAddress(from)); //發信人
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/*定義收信人*/
	public boolean setTo(String to) {
		if (to == null)
			return false;
		System.out.println("定義收信人!");
		try {
			mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/*定義抄送人*/
	public boolean setCopyTo(String copyto) {
		if (copyto == null)
			return false;
		try {
			InternetAddress[] iaToList = new InternetAddress().parse(copyto); 
			mimeMsg.setRecipients(Message.RecipientType.CC, iaToList);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/*傳送郵件模組*/
	public boolean sendOut() {
		try {
			mimeMsg.setContent(mp);
			mimeMsg.saveChanges();
			Session mailSession = Session.getInstance(props, null);
			Transport transport = mailSession.getTransport("smtp");
			transport.connect((String) props.get("mail.smtp.host"), username, password);
			transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
			System.out.println("傳送成功!");
			transport.close();
			return true;
		} catch (Exception e) {
			System.err.println("郵件失敗!" + e);
			return false;
		}
	}

	/*呼叫sendOut方法完成傳送*/
	private static boolean sendAndCc(String smtp, String from, String to, String copyto,
		String subject, String content, String username, String password) {
		Mail theMail = new Mail(smtp);
		theMail.setNeedAuth(true); // 驗證
		if (!theMail.setSubject(subject))
			return false;
		if (!theMail.setBody(content))
			return false;
		if (!theMail.setTo(to))
			return false;
		if (!theMail.setCopyTo(copyto))
			return false;
		if (!theMail.setFrom(from))
			return false;
		theMail.setNamePass(username, password);
		if (!theMail.sendOut())
			return false;
		return true;
	}
	
	public static void send(String title, String content) {		
		String smtp = "smtp.mxhichina.com";
		String from = "
[email protected]
"; String to = "[email protected]"; String copyto = "[email protected]"; String subject = title; String username = "[email protected]"; String password = "Lin198717"; sendAndCc(smtp, from, to, copyto, subject, content, username, password); // the time of mail Date d = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmsss"); System.out.println(df.format(d)); } }

3、引用的第三方jar包


4、pom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>WorkFlow</groupId>
	<artifactId>Mail</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Mail</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-mapreduce-client-core</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>jdk.tools</groupId>
			<artifactId>jdk.tools</artifactId>
			<version>1.6</version>
			<scope>system</scope>
			<systemPath>C:/Program Files/Java/jdk1.8.0_73/lib/tools.jar</systemPath>
		</dependency>
	</dependencies>	
</project>
5、maven clean,maven package

打包大小為8k,在hdfs中執行 

yarn jar WorkFlow.Mail.MailSend

能夠正常執行,並且傳送郵件

6、打包所有的dependency jar包,在pom.xml檔案中新增將jar包打入到jar包中

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<appendAssemblyId>false</appendAssemblyId>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>WorkFlow.Mail.MailSend</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
上傳到hdfs伺服器,執行java -jar Mail.jar,出現如下錯誤


使用yarn jar Mail-0.0.1.jar能夠正常執行。

7、將hdfs-site.xml和core-site.xml檔案打包到jar包中,修改pom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>WorkFlow</groupId>
	<artifactId>Mail</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Mail</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-mapreduce-client-core</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.3.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>jdk.tools</groupId>
			<artifactId>jdk.tools</artifactId>
			<version>1.6</version>
			<scope>system</scope>
			<systemPath>C:/Program Files/Java/jdk1.8.0_73/lib/tools.jar</systemPath>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<resource>
				<directory>conf/</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<appendAssemblyId>false</appendAssemblyId>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>WorkFlow.Mail.MailSend</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

java -jar Mail-001.jar能夠正常執行,yarn jar Mail-001.jar 也能夠正常執行

並且在jar包中包含xml檔案


8、將依賴jar包拷貝到工程的lib資料夾中

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
							<overWriteReleases>false</overWriteReleases>
							<overWriteSnapshots>false</overWriteSnapshots>
							<overWriteIfNewer>true</overWriteIfNewer>
						</configuration>
					</execution>
				</executions>
			</plugin>


相關推薦

eclipse建立maven工程讀取hdfs檔案傳送郵件

1、在maven下新建maven工程 2、編寫程式碼 package WorkFlow.Mail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR

eclipse建立maven工程

1.在eclipse中用maven建立專案,右鍵new>>Maven Project   2.點選next繼續   3.點選next繼續,選擇maven-archetype-webapp,   4.點選next繼續,填寫Group id和Artifac

CentOS下eclipse建立maven工程失敗

在linux下使用eclipse建立maven工程失敗,如下圖。但我在windows環境下,eclipse建立成功了。無論是eclipse,還是maven的配置基本都是相同的。。鬱悶不解 1、檢查maven環境變數 【/etc/profile】檔案中已定義環境變數 MAVEN_HO

eclipse建立maven工程時,出現目錄結構不全,只有一個resources

之前一直用的idea,想熟悉下eclipse開發maven工程,今天建立了幾個maven springmvc試了下,發現總是目錄不全,就網上各種查詢,試了很多方法 ,最後終於成功,原因在於maven的jar包配置出了問題,maven自帶的jdk版本和自己裝的不一樣,修改下就可

eclipse建立maven工程沒有src/main/resources資料夾和web.xml使用3.1的dtd時工程有錯誤的問題

1.有時候我們建立maven時會發現沒有src/main/resources檔案, 解決方法:右鍵工程———>>build path——>>選擇Source——>>Add Folder——>>勾選webapp——>&g

eclipse匯入maven工程pom.xml檔案不起作用

匯入硬碟中的maven工程時要確保import的是maven選項下的Existing Maven Pojects。 接著要替換maven倉庫的地址為自己定義的地址 window->preference->maven->user settings

如何使用eclipse建立Maven工程及其子模組

2012-02-23 14:51154人閱讀評論(0)收藏舉報 1,首先建立一個父類工程   子模組繼承父類工程      並在父類工程的pom.xml檔案中定義引入的jar及其版本號     子模組可以引用   2  建立api子模組,主要放置SDK 3 

Eclipse建立Maven工程時出現的Java Build path 問題

問題描述   使用eclipse建立Maven工程時,出現如下錯誤: Description Resource Path Location Type Build path

Eclipse建立Maven工程,pom.xml,dependency報錯的解決辦法

是否配置了maven環境 如果沒有,先配置maven環境 Mac配置maven環境 1⃣️ tar.gz archive:是在Linux、MacOsX上使用的。 2⃣️ zip arc

maven的安裝、路徑配置、修改庫檔案路徑和eclipse中的配置、建立maven工程

maven的安裝、路徑配置、修改庫檔案路徑與在eclipse中的配置一、maven的安裝解壓apache-maven-3.3.9-bin.zip到自己的資料夾下,解壓後路徑如:D:\Program\apache-maven-3.3.9。二、路徑配置右鍵“計算機”,選擇“屬性”

Eclipse】-NO.163.Eclipse.1 -【Eclipse springboot 1.x 建立maven工程初始化報錯】

Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of Mastery:5 Practical Level:5 Desired Goal:5 Arc

eclipse 建立maven 專案 動態web工程完整示例 maven 整合springmvc整合mybatis

接上一篇: eclipse maven工程自動新增依賴設定 maven工程可以線上搜尋依賴的jar包,還是非常方便的 但是有的時候可能還需要設定下 eclipse不能線上搜尋jar包 報錯 如果搜尋不到內容,或者有報錯資訊(index downloads are disabled

eclipse 建立maven 專案 動態web工程完整示例

需求表均同springmvc案例 此處只是使用maven 注意,以下所有需要建立在你的eclipse等已經整合配置好了maven了,說白了就是新建專案的時候已經可以找到maven了 沒有的話需要安裝maven 1.新建maven專案,如果不在上面,請到other裡面去找一下 2,進入maven專

MavenEclipseMaven工程多模組繼承和聚合建立

轉自:http://www.tuicool.com/articles/NnmiyiU 使用Maven對專案進行管理的時候,多模組的繼承和聚合是必不可少的,本文簡要說明一下在eclipse IDE下建立多模組工程。 1.Maven多模組的聚合 一個Maven工程

eclipse建立maven專案(動態web工程)完整示例

需求表均同springmvc案例 此處只是使用maven 注意,以下所有需要建立在你的eclipse等已經整合配置好了maven了,說白了就是新建專案的時候已經可以找到maven了 沒有的話需要安裝maven 1.新建maven專案,如果不在上面,請到other裡

eclipse 建立maven 專案 動態web工程完整示例(親測,很好)

轉自:http://www.cnblogs.com/noteless/p/5213075.html 需求表均同springmvc案例 此處只是使用maven 注意,以下所有需要建立在你的eclipse等已經整合配置好了maven了,說白了就是新建專案的時候已經可以找

Eclipse建立Maven專案時候缺失WEB-INF等檔案

用Eclipse開發時候,如果建立一個maven專案,會發現webapp資料夾中缺少web-inf、web.xml等資料夾和檔案。兩種解決方式:一、配置動態web模組專案右鍵點選properties在Dynamic Web Module選項中配置好到webapp下的路徑,勾選

使用Eclipse建立web工程

做的 -1 new 窗口 finally spf log png cnblogs 使用Eclipse建立web工程(用jsp文件做例子) 第一步:創建java web工程,打開Eclipse,點擊 File==》new==》Dynamic web Porject 第二步:在

IDEA編寫wordcount,讀取hdfs檔案,執行在Spark叢集例子

前期:已安裝好hadoop叢集和spark叢集,hadoop2.6.5,spark2.3.1,jdk1.8. scala2.1.0 第一步:在idea編寫scala程式,並且要打包(pom檔案的build標籤中配置好maven打包程式碼,可以定義主類也可以在提交的時候再定義){補充:可以在s

eclipse建立maven管理Spark的scala以及eclipseMaven配置

說明,由於spark是用scala寫的。因此,不管是在看原始碼還是在寫spark有關的程式碼的時候,都最好是用scala。由於我個人以前是純粹的Pythoner,一直使用的都是PyCharm,然而最近換了新工作後,由於各種原因,要麼使用付費軟體,要麼使用免費軟體,所以,我被迫選擇了eclip