Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io._
- import java.net.{SocketException, SocketTimeoutException, UnknownHostException}
- import java.util.concurrent.{ExecutorService, Executors, TimeUnit}
- import org.apache.commons.dbcp2._
- import scalaj.http.Http
- object Main extends App {
- val sites = "E:\\Tools\\scala\\sites.txt"
- val poolSize = 1000
- val pool: ExecutorService = Executors.newFixedThreadPool(poolSize)
- val now = System.nanoTime
- for (line <- scala.io.Source.fromFile(sites).getLines()) {
- pool.execute(new Fetcher(line))
- }
- pool.shutdown()
- try {
- pool.awaitTermination(Long.MaxValue, TimeUnit.NANOSECONDS)
- val elapsedTime = System.nanoTime - now
- println("Time elapsed: " + elapsedTime / 1000000000.0 + " seconds")
- } catch {
- case e: InterruptedException =>
- println("process interrupted")
- }
- }
- class Fetcher(url: String) extends Runnable {
- def run() {
- val writer1 = new PrintWriter(new OutputStreamWriter(new FileOutputStream("socket_error.txt", true), "UTF-8"))
- val writer2 = new PrintWriter(new OutputStreamWriter(new FileOutputStream("socket_timeout.txt", true), "UTF-8"))
- val writer3 = new PrintWriter(new OutputStreamWriter(new FileOutputStream("unknown_host.txt", true), "UTF-8"))
- println("Fetching " + url)
- try {
- val res = Http("http://" + url).timeout(connTimeoutMs = 10000, readTimeoutMs = 5000).asString
- println(url + " fetched")
- val conn = Datasource.connectionPool.getConnection
- val query = "INSERT INTO test (site, data) values (?, ?)"
- val preparedStmt = conn.prepareStatement(query)
- preparedStmt.setString(1, url)
- preparedStmt.setString(2, res.toString)
- preparedStmt.execute()
- } catch {
- case se: SocketException =>
- println("---!---" + url + " socket error")
- writer1.write(url + '\n')
- case ste: SocketTimeoutException =>
- println("---!---" + url + " socket timeout")
- writer2.write(url + '\n')
- case uhe: UnknownHostException =>
- println("---!---" + url + " unknown host")
- writer3.write(url + '\n')
- }
- writer1.close()
- writer2.close()
- writer3.close()
- }
- }
- object Datasource {
- val connectionPool = new BasicDataSource()
- connectionPool.setDriverClassName("com.mysql.jdbc.Driver")
- connectionPool.setUrl("jdbc:mysql://localhost/mydb")
- connectionPool.setUsername("root")
- connectionPool.setPassword("t,@ysq1")
- connectionPool.setInitialSize(3)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement